8-Damenproblem

N

Nicki

Gast
Ich habe jetzt folgende Frage zu meinem Code: Gibt es noch eine andere Methode als "return" für die Ausgabe zu nehmen, sodass dieser dann nicht die Methode verlässt?

Ich habe das Problem, dass er zu boolean found2 garnicht mehr erst kommt. Wie kann sicherstellen, dass er alle "verbotenen Plätze" markiert?



Java:
public class Acht_Damen_Problem {
    
    public static void clear(int [][]feld){
        for (int i=0; i<8; i++){
            for (int j=0; j<8; j++){
                feld[i][j]=0;
            }
        }
    }
    //Hauptmethode
    public static int [] [] loese(int zeile, int spalte){
        int [][] feld = new int [8][8];
        clear(feld);
                //setzt die Startposition
        feld[zeile][spalte]=1;
        
        loeseProblem(feld,1,1);
        
        return feld;
    }
    
        //Rekursion 
        public static boolean loeseProblem(int[][] feld, int zeile, int spalte)
    {
        if (zeile > 7)
        {
            return false;
        }
 
        
        else
        {
            feld[zeile][spalte] = 1;
            // Falls ergebnis erzielt
            if (spalte == 7)
            {
                return true; // richtiges Ergebnis gefunden
            }
            else
            {
                boolean found = loeseProblem(feld, 1, spalte + 1);
                if (found)
                {
                    return true; // fertig, nicht Dame wieder löschen
                }
                // Schritt zurück
                feld[zeile][spalte] = 0;
              
                boolean found2 = loeseProblem(feld, zeile+1 , 1);
                if (found2)
                {
                    return true; // fertig, nicht Dame wieder löschen
                }
                // Schritt zurück
                feld[zeile][spalte] = 0;
                
            }
            
            
        }
        // vereinfachte weitere Suche
        return loeseProblem(feld, zeile + 1, spalte) && loeseProblem(feld, 1, spalte + 1);
        
    }
        
                
        public static void gebeAus(int[][] f){
            for(int i=0;i<f.length;i++){
                   for(int y=0;y<f[i].length;y++){
                       System.out.print(f[i][y]);
                       
                   }
                   System.out.println();
               }
       }
                   
                   public static void main(String[] args) {
                       gebeAus(loese(1, 4));               
                   }
   }
 

Marco13

Top Contributor
Eine sehr komplizierter for-Schleife :D Er ruft die Methode auf, setzt eine Dame, ruft die Methode mit spalte+1 auf, setzt wieder eine Dame... und irgendwann glaubt er, wegen
Java:
           if (spalte == 7)
            {
                return true; // richtiges Ergebnis gefunden
            }
fertig zu sein. Eine Überprüfung, ob eine Dame die andere schlagen kann, findet ja gar nicht statt...!?
 
N

Nicki

Gast
ja genau das war ja meine Frage. Wie kann ich das ändern bzw. gibt eine andere Methode einen Wert auszugeben als mit return, damit er weiter den Code durchgeht...
 

Templarthelast

Bekanntes Mitglied
Du kannst mir
Code:
break;
eine Schleife unterbrechen, allerdings beendet nur ein
Code:
return
Funktion
 

HimBromBeere

Top Contributor
Gibt es noch eine andere Methode als "return" für die Ausgabe zu nehmen
Für ´ne Ausgabe könnte man - jetzt mal TOTAAAL abwägig gedacht - einen einfachen Sysout nehmen...
Aber ich befürchte, DAS war nicht die eigentliche Frage :D
Du kannst nicht eine Methode was zurückgeben lassen und sie danach weiter ausführen wollen. Du kannst sie nur entweder eine Menge von Werten ausgeben lassen (also z.B. in einer for-Schleife ein Array zusammenbauen und dieses nach Durchlaufen dieser Schleife zurückgeben) oder die Methode mit veränderten Parametern widerholt aufrufen.
 

Ähnliche Java Themen

Neue Themen


Oben