Frage zu for - Schleifen

G

Ghost1

Gast
Hallo zusammen! =)

Ich habe mal zwei Fragen zu for-schleifen:

1. Frage

Java:
 for(int x=0 ; x<8 ; x++) {
     for (int y = x+1 ; y<9 ; y++) {
       
     System.out.println(x + "   " + y);

   }
}

Dann gibt er mir

0 1
1 2
2 3
3 4
...

aus ?! Warum? Ich möchte eigentlich
0 1
0 2
0 3
0 4
0 5
0 6
...
1 2
1 3
1 4 usw. ausgegeben haben!

2. Frage

Ich habe eine Methode geschrieben in der ich das Array sudoku[][] in das Array a[][] überschreiben will. Allerdings bekomme ich hier eine out-of-Bounds-Exception?
Wichtig dabei ist, das die Spalten(0-2) und Zeilen(0-2) in Array a in Zeile 0 gespeichert werden.
(Also 9 Werte!!!) Warum geht das dann nicht?

Java:
	int [][]a = new int [9][9];
		int n = 1;
		do {
			for (int l = 0; l < a.length; l++) {
				for (int k = 0; k < a.length; k++) {
					for (int i = (3*n)-3 ; i < 3*n ; i++) {
						for (int j = (3*n)-3 ; j < 3*n; j++) {
							a[l][k] = sudoku[i][j];
						} // end for
					} // end for
					n = n+1;
				} // end for
			} // end for
			
			} while (n == 3);
 
S

SlaterB

Gast
> Dann gibt er mir [a] aus ?! Warum? Ich möchte eigentlich usw. ausgegeben haben!

bei mir erscheint korrekt Ausgabe b, poste vollständige Testprogramme,
dann kannst du zwar theoretisch immer noch bei dir anderes erleben, vielleicht aber auch nicht mehr

> (Also 9 Werte!!!) Warum geht das dann nicht?
die Indexe sind 0-8, nicht 1-9

du fängst für l und k ja auch bei 0 an..

edit1: ok, n=1 wird nicht direkt verwendet, ich schaue noch, vielleicht hier gleich weiterer edit

edit2:
die ganze 3fach-Schleife ist doch ziemlich verrückt, was ist überhaupt dein Ziel?
hast du ja zum Teil schon genannt, aber wie ist dieser Code dazu zu verstehen?

l läuft von 0-8, k genauso, das sind schon 81 Schritte -> n steigt auf 81!,
das kann doch nicht alles richtig sein für einfache Übertragung von nur 9 Werten?
 
Zuletzt bearbeitet von einem Moderator:
Z

Zeigefinger

Gast
1. Frage

Java:
 for(int x=0 ; x<8 ; x++) {
     for (int y = x+1 ; y<9 ; y++) {
       
     System.out.println(x + "   " + y);
 
   }
}

Dann gibt er mir

0 1
1 2
2 3
3 4
...

aus ?! Warum?

Kann ich mir kaum vorstellen. Bei mir gibt er das aus, was du haben willst...
 
G

Ghost1.1

Gast
Java:
static boolean pruefeBloecke(int[][] sudoku) {
    
    boolean ergebnis = true;
    int [] a = new int [9];
    int n=0;

    for(int z=0 ; z < 3 ; z++) {
        for (int s=0 ; s < 3 ; s++) {
             for (int i=0 ; i < 3 ; i++) {
                  for (int j=0 ; j < 3 ; j++) {
                    a[n] = sudoku [3*z+i][3*s+j];
                    n = n+1 ;
                  
          }//end 4. for
        }//end 3. for
        
        for (int x=0 ; x<8 ; x++) {
          for (int y = x+1 ; y<9 ; y++) {
          
              if (a[x] == a[y]) ergebnis = false; break;
           
          
          } 
          if (ergebnis == false) break;
        }
        
 if (ergebnis == false) break;
      }// end 2. for 
if (ergebnis == false) break;
    }// end 1. for
    
return ergebnis;

}

Hier die ganze Methode aus der das kommt.
Hoffe das Hilft...
 
S

SlaterB

Gast
wobei helfen, bei Eigensuche nach möglichen Fehlern + automatischer Korrektur?
nene, du musst schon selber wissen und erklären können worum es geht, was welcher Code (zumindest geplant) macht usw.,

im Zweifel lösche unbekannten undurchsichtigen Code und fange korrekt neu an, immer eine Schleife nach der anderen,
nicht 75 auf einmal ineinander verquirrlen und dann nicht mehr wissen was passiert
 
G

Ghost1.1

Gast
Es ist eine Methode im Sudoku die 9 Blöcke auf korrektheit zu prüfen.

Zeile 7-8:
Die ersten 2. Forschleifen bestimmen die Multiplikatoren und erlauben es die Blöcke gesondert nacheinander zu betrachten.

Zeile 9-10:
Die 2 Forschleifen durchlaufen eine Matrix wie üblich, in dem Fall diei 3x3 des jeweiligen Sudoku Blocks.

Zeile 11-12:
Schreiben die Werte in dem Block in ein eindimensionales Array um dieses dann auf korrektheit zu überprüfen. Somit kann ich den gleichen Algorithmus verwenden wie in der Methode die die Zeilen prüft (sieht man jetzt hier nicht). Zeile 12 sorgt dafür das die einzelnen Werte im Block die korrekte Zuordnung im Array haben.

Zeile 17-20:
Hier der der oben genannte Algoritmus der jeden Wert untereinander auf Gleichheit überprüft und wenn eine Gleichheit vorliegt den boolean "ergebnis" auf false setzt und abbricht, damit dieser dann zurück in die main gegeben werden kann.


Alles klar ? ;)

Also erzähl mir nicht das ich mein eigenen Code nicht verstehe...

Im übrigen fehlen zwei Klammern in Zeile 20:

Java:
if (a[x] == a[y]) {ergebnis = false; break;}

wäre korrekt.
Das break soll ja nur ausgeführt werden wenn die if Bedinung greift. Vorher wurde es jedes mal ausgeführt weil die if Bedingung nach dem " ; " endet.

Grüße!
 
S

SlaterB

Gast
leider muss ich nun erneut zurückweisen, und zwar:
was ist denn jetzt gerade die Frage dazu?
geht es um 1. Frage oder 2. Frage vom ersten Post oder alles noch ungeklärt?

für die zweite Frage ist der Code ja nun bisschen anders, wenn ich auch hier vermuten möchte, dass n über 8 bzw. 9 hinausgeht,
allein für die i und j-Schleife steigt n auf 9, und das ganze wird 9x wiederholt durch z + s,
vielleicht sollte n vor oder nach der i+j-Schleife auf 0 zurückgesetzt werden, damit jedesmal eine neue Befüllung von a beginnt?

für die erste Schleife findet sich auch eine Codestelle, wenn auch nicht mit Ausgabe,
vermutest du dort falsch verglichende Indexe?
was konkret fällt dir überhaupt negativ auf, was ist das Problem, was führt dich zu den Fragen?

vervollständigt wäre das ganze also durch
- lauffähiges Programm, eine main-Methode mit Aufruf dieser Methode, definierten Dummy-Daten die zum Fehler führen
- Erläuterung deiner Erkenntnisse aus dem Programm, Ausgaben?, Nennung der konkreten Probleme, andere Wunsch-Ergebnisse
 
G

Ghost1.1

Gast
Entschuldige!
In der Tat muss noch eine Zeile ergänzt werden.

Nach der 2. For - Schleiße muss n immer wieder auf 0 gesetzt werden.

Meine Frage hat sich nur auf mein Problem der 2 For-Schleifen bezogen, welche sich durch die fehlenden Klammern aber geklärt hat.

Hier das ganze Programm:

Java:
public class Sudoku {
  public static void main(String[] args) {
  
  int [][] sudoku = initMatrix() ;
  
  for (int i=0 ; i<9 ; i++) {
      for (int j=0 ; j<9 ; j++) {
      System.out.printf( "%3d" , sudoku[i][j]); }
      System.out.println(); }
      
   if (pruefeZeilen(sudoku) && pruefeSpalten(sudoku) && pruefeBloecke(sudoku)) {
       System.out.println("Die Matrix ist eine korrekte Sudoku Lösung !"); }
   else {
       System.out.println("Die Matrix ist KEINE korrekte Sudoku Lösung !"); }
  
  }//end Main




static int [][] initMatrix() {

      int [][] feld = new int [9][9] ;
      
      for (int i=0 ; i < 9 ; i++) {
          for (int j=0 ; j < 9 ; j++) {
              feld [i][j] = (int) (10*Math.random());
          }
      }
      return feld ;
}

static boolean pruefeZeilen(int [][]sudoku) {

boolean [] zeile = new boolean [9];
boolean ergebnis = true ;

leave: for (int i=0 ; i<9 ; i++) {
    for (int j=0 ; j<8 ; j++) {
    	for (int k = j+1 ; k<9 ; k++) {
    	
     	if (sudoku [i][j] == sudoku [i][k]){
     	   ergebnis = false ; break leave;
     	}
     	else zeile [i] = true ;
    }
  }
}

return ergebnis;

}


static boolean pruefeSpalten(int [][]sudoku) {

boolean [] spalte = new boolean [9];
boolean ergebnis = true;

leave: for (int i=0 ; i<9 ; i++) {
    for (int j=0 ; j<8 ; j++) {
        for (int k = j+1 ; k<9 ; k++) {
         
           if (sudoku [j][i] == sudoku [k][i]) {
               spalte [i] = false ; break leave;
           }
           else spalte [i] = true ;              
     }
  }
}

return ergebnis;


}//end Methode



static boolean pruefeBloecke(int[][] sudoku) {
    
    boolean ergebnis = true;
    int [] a = new int [9];
    int n=0;

    leave: for(int z=0 ; z < 3 ; z++) {
        for (int s=0 ; s < 3 ; s++) {
             for (int i=0 ; i < 3 ; i++) {
                  for (int j=0 ; j < 3 ; j++) {
                    a[n] = sudoku [3*z+i][3*s+j];
                    n = n+1 ;
          }//end 4. for
        }//end 3. for
        
        for (int x=0 ; x<8 ; x++) {
          for (int y = x+1 ; y<9 ; y++) {
          
              if (a[x] == a[y]) {ergebnis = false; break leave;}
          } 
        }
      }// end 2. for 
    }// end 1. for
    
return ergebnis;

}


      


}//end class

um deinem Wunsch nachzukommen.
Das Programm läuft jetzt allerdings reibungslos.

Entschuldige auch meinen etwas rauen Ton.
Ich dachte das Problem wäre etwas komplexer als nur die 2 Klammern und deshalb habe ich mich an das Forum gewendet.
Mit der 2. Frage aus dem 1. Post hat das alles aber nichts zu tun! =)

Grüße
 
G

Ghost1.1

Gast
ach da fehlt es jetzt wieder.... -.-

also so:

Java:
public class Sudoku {
  public static void main(String[] args) {
  
  int [][] sudoku = initMatrix() ;
  
  for (int i=0 ; i<9 ; i++) {
      for (int j=0 ; j<9 ; j++) {
      System.out.printf( "%3d" , sudoku[i][j]); }
      System.out.println(); }
      
   if (pruefeZeilen(sudoku) && pruefeSpalten(sudoku) && pruefeBloecke(sudoku)) {
       System.out.println("Die Matrix ist eine korrekte Sudoku Lösung !"); }
   else {
       System.out.println("Die Matrix ist KEINE korrekte Sudoku Lösung !"); }
  
  }//end Main




static int [][] initMatrix() {

      int [][] feld = new int [9][9] ;
      
      for (int i=0 ; i < 9 ; i++) {
          for (int j=0 ; j < 9 ; j++) {
              feld [i][j] = (int) (10*Math.random());
          }
      }
      return feld ;
}

static boolean pruefeZeilen(int [][]sudoku) {

boolean [] zeile = new boolean [9];
boolean ergebnis = true ;

leave: for (int i=0 ; i<9 ; i++) {
    for (int j=0 ; j<8 ; j++) {
    	for (int k = j+1 ; k<9 ; k++) {
    	
     	if (sudoku [i][j] == sudoku [i][k]){
     	   ergebnis = false ; break leave;
     	}
     	else zeile [i] = true ;
    }
  }
}

return ergebnis;

}


static boolean pruefeSpalten(int [][]sudoku) {

boolean [] spalte = new boolean [9];
boolean ergebnis = true;

leave: for (int i=0 ; i<9 ; i++) {
    for (int j=0 ; j<8 ; j++) {
        for (int k = j+1 ; k<9 ; k++) {
         
           if (sudoku [j][i] == sudoku [k][i]) {
               spalte [i] = false ; break leave;
           }
           else spalte [i] = true ;              
     }
  }
}

return ergebnis;


}//end Methode



static boolean pruefeBloecke(int[][] sudoku) {
    
    boolean ergebnis = true;
    int [] a = new int [9];
    int n=0;

    leave: for(int z=0 ; z < 3 ; z++) {
        for (int s=0 ; s < 3 ; s++) {
             [B]n = 0;[/B]
             for (int i=0 ; i < 3 ; i++) {
                  for (int j=0 ; j < 3 ; j++) {
                    a[n] = sudoku [3*z+i][3*s+j];
                    n = n+1 ;
          }//end 4. for
        }//end 3. for
        
        for (int x=0 ; x<8 ; x++) {
          for (int y = x+1 ; y<9 ; y++) {
          
              if (a[x] == a[y]) {ergebnis = false; break leave;}
          } 
        }
      }// end 2. for 
    }// end 1. for
    
return ergebnis;

}


      


}//end class
 
S

SlaterB

Gast
wenn ich alles richtig zusammenzähle ist es nun geklärt, ich setzte das Thema auf Erledigt,
sonst wieder melden ;)
 

AquaBall

Top Contributor
Java:
     if (a[x] == a[y]) ergebnis = false; break;
          } 
          if (ergebnis == false) break;
        }
 if (ergebnis == false) break;
      }// end 2. for 
if (ergebnis == false) break;
    }// end 1. for
    
return ergebnis;

... Solltest du aber nich so lassen.
Da kannst du viel einfacher schreiben
Java:
            if (a[x] == a[y]) return false;
          } 
        }
      }// end 2. for 
    }// end 1. for
return ergebnis;

Und noch viel schlimmer ist:
Java:
leave: for (...) {
    for (...) {
        for (...) {
...
           ergebnis = false ; break leave;
        }

Labled break ist meiner Meinung nach nie nötig, und sehr gefährlicher Programmierstil.
Im Vorliegenden Fall ist es sogar unnötig kompliziert. Viel einfacher wäre:
Java:
for (...) {
    for (...) {
        for (...) {
...
           return false;
        }
 
G

Ghost1.1

Gast
Brauche ich die anderen Klammern dann nicht mehr zu machen?

mit die Geschichte mit der Labled For-Schleife habe ich von meiner Professorin ...
 

AquaBall

Top Contributor
Brauche ich die anderen Klammern dann nicht mehr zu machen?
mit die Geschichte mit der Labled For-Schleife habe ich von meiner Professorin ...

Doch, doch! Klammern schließen musst du natürlich alle.
(Sorry für meine Ungenauigkeit, aber das wär dir beim Compilieren schon aufgefallen.)

Naja, auch Lehrer dürfen mal "sub-optimales" unterrichten, und Schüler dürfen auch besser werden als ihre Lehrer.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Kurze Frage zu verschachtelten Schleifen Java Basics - Anfänger-Themen 3
Z Frage zu for-Schleifen Java Basics - Anfänger-Themen 5
T Erneute Frage zu Schleifen Java Basics - Anfänger-Themen 4
T Erste Schritte BlueJ kapitel 4 frage Schleifen ? Java Basics - Anfänger-Themen 4
D Frage zu true false in Schleifen Java Basics - Anfänger-Themen 8
H Schleifen Frage (while,if etc) Java Basics - Anfänger-Themen 8
S Sortier Frage (schleifen HILFE) Java Basics - Anfänger-Themen 6
B Frage zu "for" Schleifen Java Basics - Anfänger-Themen 11
G kurze frage zu if schleifen Java Basics - Anfänger-Themen 15
G Frage zu Umwandlung char[] in string[] bzw. Schleifen Java Basics - Anfänger-Themen 9
Zrebna Frage zu Test-Driven Development (TDD) Java Basics - Anfänger-Themen 3
I Frage Thymeleaf -> Fehler ignorieren und mit "" ersetzen? Java Basics - Anfänger-Themen 15
I Frage Thymeleaf -> Prefix / Suffix ändern? Java Basics - Anfänger-Themen 11
D Rekursions Probleme / frage Java Basics - Anfänger-Themen 4
T Frage zu Parse Java Basics - Anfänger-Themen 2
H Frage an die Profis Java Basics - Anfänger-Themen 4
J Eine konzeptionelle Frage zu OOP Java Basics - Anfänger-Themen 3
P Frage zu Rekursion und Backtracking Java Basics - Anfänger-Themen 2
H Frage zur Ausgabe Java Basics - Anfänger-Themen 4
H Frage zu arithmetischen Operationen Java Basics - Anfänger-Themen 20
F Kurze Frage zu replace() Java Basics - Anfänger-Themen 19
JavaSchmecktLecker Polymorphie Frage zur Methodenüberschreibung Java Basics - Anfänger-Themen 21
J Frage zu einem "Taschenrechner" code Java Basics - Anfänger-Themen 9
B Erste Schritte Frage zu Instanzierung und Referenzen Java Basics - Anfänger-Themen 8
DoubleM Runtime.getRuntime().exec Frage Java Basics - Anfänger-Themen 2
J Eine theoretische Frage zur Praxis - JPanel oder Canvas Java Basics - Anfänger-Themen 5
O Frage: Formaler Typbezeichner? Java Basics - Anfänger-Themen 3
I BlueJ Queue Frage für Klausur Java Basics - Anfänger-Themen 2
N Verständnis Frage zu Variablen Java Basics - Anfänger-Themen 3
N Spezielle frage zum Comparator Java Basics - Anfänger-Themen 6
L Frage zum Array Java Basics - Anfänger-Themen 1
A Frage zum UML Design Java Basics - Anfänger-Themen 1
I Hilfe bei Klausur Frage Java Basics - Anfänger-Themen 8
izoards Drucken Frage zu FAQ Beitrag Java Basics - Anfänger-Themen 2
J Frage zu meinem Code (OOP) Java Basics - Anfänger-Themen 4
sserio Split() -> Regex Frage. Java Basics - Anfänger-Themen 7
A OCA Study Guide: 2. Frage aus Kapitel 3 Java Basics - Anfänger-Themen 9
sserio Date Library Frage Java Basics - Anfänger-Themen 9
Max246Sch Frage zu Währungsrechner Code Java Basics - Anfänger-Themen 2
sserio Frage zu HashMaps Java Basics - Anfänger-Themen 20
sserio Frage zu Threading - Multithreading Java Basics - Anfänger-Themen 2
sserio Frage zu Lambda Ausdrücken Java Basics - Anfänger-Themen 7
sserio Frage zu BigInteger Java Basics - Anfänger-Themen 1
D Frage bzgl. Enum-Handhabung Java Basics - Anfänger-Themen 16
xxx12 Frage Java Basics - Anfänger-Themen 2
I Generelle Frage zu Mikroservices (Spring Boot?), Docker... Java Basics - Anfänger-Themen 7
R Frage zu Methoden (Rückgabewert u. ohne.) Java Basics - Anfänger-Themen 2
A Frage zur programmierung Java Basics - Anfänger-Themen 12
M Frage zur Methode split der Klasse String Java Basics - Anfänger-Themen 32
R Input/Output Frage zu Java IO Java Basics - Anfänger-Themen 6
M Frage zu printWriter Java Basics - Anfänger-Themen 5
C Frage zu OLSMultipleLinearRegression Java Basics - Anfänger-Themen 31
KogoroMori21 Frage zum Euklidischen Algorithmus Java Basics - Anfänger-Themen 11
S Verständnis-Frage zu einer HÜ? Java Basics - Anfänger-Themen 1
F Frage betreff Programm mit dem man C++-Code in JAVA-Code übersetzen lassen kann Java Basics - Anfänger-Themen 2
L Frage zur Ticket Maschine Java Basics - Anfänger-Themen 1
J Frage zu OOP-Klassendiagramm Java Basics - Anfänger-Themen 8
OSchriever Frage zu Compiler Java Basics - Anfänger-Themen 8
H Frage zu Throw Exception Java Basics - Anfänger-Themen 2
TimoN11 Frage zu Java-Vererbung (Cast) Java Basics - Anfänger-Themen 5
Bademeister007 Hallo Leute ich hab eine Frage zur ArrayList Java Basics - Anfänger-Themen 8
F Frage betreff Programmierbücher zu Lagerverwaltung als Konsolenprogramm Java Basics - Anfänger-Themen 3
dieter000 Kurze Frage kann mir ejmand kurz diesen Code erklären, bzw wie man die zeilen erklärt und so Java Basics - Anfänger-Themen 1
I String.split regex Frage Java Basics - Anfänger-Themen 2
N Best Practice Frage zum MVC-Pattern Java Basics - Anfänger-Themen 2
dieter000 Frage zu einem Beispiel... Java Basics - Anfänger-Themen 5
J Frage zum Loggen Java Basics - Anfänger-Themen 18
J Methoden Frage: Array-Werte in anderer Methode ändern Java Basics - Anfänger-Themen 4
Zrebna Frage zum "Referenzen-konzept" in Java Java Basics - Anfänger-Themen 8
JD_1998 Array-Position aus einer Methode in einer anderen ausgeben (Kurze Frage) Java Basics - Anfänger-Themen 2
marcooooo Frage zu bestimmten Beispiel Java Basics - Anfänger-Themen 31
NeoLexx equals()-Methode Verständnis Frage anhand Code Beispiel Java Basics - Anfänger-Themen 22
N Input/Output Eine Frage über system.out.println. Java Basics - Anfänger-Themen 10
B Erste Schritte Learning Coding (!) Frage an erfahrene Programmierer. Java Basics - Anfänger-Themen 23
M konzeptuelle Frage: In welcher Klasse definiert man am Besten Methoden, die die Kommunikation mit dem User regeln? Java Basics - Anfänger-Themen 8
B Frage zum Code verständnis im Resultat Java Basics - Anfänger-Themen 10
C Exception-Frage Java Basics - Anfänger-Themen 3
J Eine Frage zur Schreibweise == ? : Java Basics - Anfänger-Themen 3
S Frage des Designs Java Basics - Anfänger-Themen 1
JavaTalksToMe Extends/Implements Frage Java Basics - Anfänger-Themen 3
pkm Frage zu Servletfunktion Java Basics - Anfänger-Themen 0
B Frage zur Währungsumrechnung Java Basics - Anfänger-Themen 3
S Allgemeine Frage über Generics und Vererbungen Java Basics - Anfänger-Themen 5
Kirby.exe Frage zur Verwendung von Interfaces Java Basics - Anfänger-Themen 6
D Frage zu Strings einer Exception Java Basics - Anfänger-Themen 4
L Wie frage ich ab, ob in einem Array, Werte doppelt vorkommen? Java Basics - Anfänger-Themen 4
D Frage zur IDE IntelliJ IDEA Java Basics - Anfänger-Themen 6
H Frage zum 2d Array Java Basics - Anfänger-Themen 1
N Frage zum Newton-Fraktal Java Basics - Anfänger-Themen 1
H Frage zu interfaces Java Basics - Anfänger-Themen 1
J Frage dazu Variablen klassenübergreifend zu verändern Java Basics - Anfänger-Themen 22
I Frage zu SkipList Java Basics - Anfänger-Themen 4
G Frage zu JScrollPane Java Basics - Anfänger-Themen 12
Kirby.exe Allgemeine Frage Java Basics - Anfänger-Themen 3
W Frage zu anonymen Klassen Java Basics - Anfänger-Themen 4
J Kleine Frage zu OOP Java Basics - Anfänger-Themen 371
S Frage Klasse und Objekte Java Basics - Anfänger-Themen 2
F Frage zu Iteratoren Java Basics - Anfänger-Themen 2
C Erste Schritte Frage zur ArrayList Java Basics - Anfänger-Themen 15
J Frage zur Vererbung Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben