2 For schleife

thehasso

Erfahrenes Mitglied
Hallo,

in diesem beispiel, wird ein 2 Dimensionales Array deklariert. Sprich es werden zuerst zwei ein Dimensionale Arrays deklariert und dann unte in int [][] dim2 ... zu ein zweidimensionales Array zusammengesetzt.

So der Professor hat dann mit 2 verschiedenen Arten die Summe des Arrays gebildet. Die das mit der For each Schleife versteh ich zu 0. Deswegen versuche ich gerade erstmal das mit den normalen 2 For Schleifen nach zu voll ziehen.

dim2.length ist ja anscheinend 2.(das müssten dann die zeilen sein.
Warum denn , wie kann man das behaupten ich mein wenn Ich ein Array mit
int[] a = new [10]; Dekl. dann kann ich sagen die Länge ist 9 aber bei den 2 Dimensionales versteh ich das nicht.

dim2[zeile].length und das ist 5.Warum steht da zeile in der eckigen Klammer?


Code:
 // dieses Programm bildet die Summe eines zweidimensionales Array!  
	 class Arrays {
   
      int[] feld = {1,2,3}; // 1.zeile
      int[] prim = {2,3,5,7,11}; // 2.zeile
   
      String[] worte = {"eins","zwei"};
   
      int[][]  dim2 = {feld,prim};
      // dim2 ist ein Array von int-Arrays
   	
   	
   
   // Summe über dim2
       int summe() {
         int erg = 0;
      
         for(int[] zeile  : dim2) {
            for(int x : zeile) {
               erg += x;
    				System.out.println(erg);        
				}
         }
         return erg;
      }
   	
       int summeMitIndex() {
         int erg = 0;
      	
         for(int zeile=0; zeile<dim2.length; zeile++) {
            for(int spalte=0; spalte<dim2[zeile].length  ; spalte++) {
				
               erg += dim2[zeile][spalte];
					System.out.println(erg);
            }
				System.out.println("Das dim2.length ist: "+dim2.length);
				System.out.println("Das dim2[zeile].length ist: "+dim2[zeile].length);
         }
      	
         return erg;
      
      }
		
		public static void main(String[] args) {
		Arrays objekt = new Arrays();
	//	objekt.summe();
		objekt.summeMitIndex();
		}
   
   }


Freu mich auch hilfreiche und ausführliche antworten danke.
 
length <> maximaler Index.

dim2[0] = feld
dim2[1] = prim

dim2.length = 2

In der for each schleife braucht man keinen Zähler, weil er einfach alle Inhalte des Array durchgeht.

MyObject[] nyArray = [MyObject1, MyObject2]
for(MyObject myVariable : myArray) {...}

Also, für jede myVariable vom Typ MyObject aus dem Array myArray wird die Schleife ausgeführt.
 
hmm danke, Ich mein eigentlich. Bei der for each Schleife wird bei einen eindimensionales Array eine hilfsvariable deklariert um den inhalt auszulesen. Beispiel:


Code:
void for_each_schleife(){
	
	String [] wochentage = { "Montag", "Dienstag", "Mittwoch", "Freitag", "Samstag", "Sonntag" };
	
	System.out.println("for ( String x: wochentage )");
	int i = 0;
	for ( String x: wochentage ) {
	++i;
		System.out.println(i+".Wochentag"+x);
	}

}


Hier benötigt man eine String x um alle Wochentage vom array auszulesen.

Warum werden dann beim 2 Dimensionalen Array folgendes gemacht:

Code:
         for(int[] zeile  : dim2) {
            for(int x : zeile) {
               erg += x;
    				System.out.println(erg);        
				}


Und nicht einfach wie beim eindimensionales Array:

Code:
         for(int x  : dim2) {
               erg += x;
    				System.out.println(erg);        
				}


da x sowieso durch das array geht und alle Werte ausliest.

Danke,
lg
 
Hallo!
Bei 2-dimensionalen Arrays passiert das gleiche wie bei eindimensionalen Arrays. Es werden immer die Werte an dem jeweilige Index behandelt. Ein eindimensionales int-Array hat einzelne Werte des Typs int:
Java:
int[] intArray = int[]{1,2,3,4};
for(int value : intArray)
{
   // value ist ein int Wert hat hat der Reihe nach die Werte 1,2,3,4
}

Bei einem zweidimensionalen int-Array ist der Wert des ersten Array ein anderes Array.
Java:
int[] array1 = {11,12,13,14};
int[] array2 = {21,22,23,24};
int[] array3 = {31,32,33,34};

int[][] twoDim =  {array1, array2, array3};

// 1,2,3 sind die Indices von twoDim

// twoDim[1] => int[] mit den Werten [11][12][13][14]
// twoDim[2] => int[] mit den Werten [21][22][23][24]
// twoDim[3] => int[] mit den Werten [31][32][33][34]

for(int[] a: twoDim)
{
   // a ist ein int[]
}

Um also an die int-Werte zu kommen musst du zuerst das erste Array durchlaufen, wo du in jedem Iterationsschritt ein anderes int[] zurückbekommst. Über dieses Array kannst du iterieren und du bekommst deine int-Werte.

Ich hoffe das Ganze war jetzt nicht zu konfus, ist heut irgendwie noch zu früh ;-)

mfg flo
 
Zuletzt bearbeitet von einem Moderator:
Gibt es eine Möglichkeit dafür in einem Array diesen Typs direkt die int Werte herauszufiltern. Die Möglichkeit hier geht nartürlich nicht, da dim2 int Arrays enthält:

Code:
for (int x : dim2[])

Allerdings habe ich es mit einer doppelten Verschachtelung versucht und bin daran gescheitert.

Code:
for (int x : (int[] zeile : dim2[]))

Ich bin Java Neuling und beschäftige mich grade zum ersten Mal mit der for-each Schleife. Mich würde interessieren wie ich mit einer for-Anweisung direkt auf die int-Werte komme, auch wenn ich die Variante mit 2 for-each Schleifen verstanden habe.
 
Gar nicht. Bevor du eine Geburtstagsgeschenk nicht aufgemacht hast, weißt du auch nicht was drin ist.

Ein mehrdimensionales Array muss z.B. auch nicht für jede "Zeile" gleich lang sein.
 
Grad wenn du neuling bist, solltest du keine Einzeiler schreiben, denn die werden schnell unlesbar. Mach lieber die 2 Schleifen. Wenn du in einem Monat den Code wieder lesen willst, ist es so besser.....

Java:
for (int[] line: lines){
    for (int x: line) {
        //do anything;
    }
}

Wennd u unbeding kürzen möchtest, könnte das folgende unlesbare ev. funktionieren (ist nicht getestet)

Java:
for (int[] line: lines)  for (int x: line)  {
    //do anything;
}

oder ganz kurz

Java:
for (int[] line: lines)  for (int x: line)  //do anything;
 
Wenn ich zwei for-Schleifen hintereinander schreibe bleiben das zwei for-Schleifen.

Was ich wissen wollte ist, ob man die Logik des Programms noch verküzen kann.
Eben etwas ala:
Code:
for (int x : (int[] zeile : dim2[]))
in richtig^^

Aber dafür gibt es dann anscheinend keine Möglichkeit.

GGrüße
 
Hast du meine Kürzungsvorschläge getestet? Oder behaubtest du ohne meinen letzten Beitrag gelesen zu haben dass man es eben nicht kürzen kann?
 
Du hast nur die Einrückung geändert und Klammern weggelassen. Das ist für mich keine Kürzung. Klar kann ich zwei for Schleifen in eine Zeile ballern genauso wie ich den gesamten Java Code in eine Zeile schreiben kann. Aber wer will das lesen.
 
Zurück