2016-06-03 6 views
-1

Wie kann ich einen kürzeren Code mit einer for-Schleife schreiben, ist das möglich? anstatt zu schreiben;Wie kann ich meinen Jagged (Ragged) code kürzer machen?

int array[][] = new int[10][]; 
    array[0] = new int[1]; 
    array[1] = new int[2]; 
    array[2] = new int[3]; 
    array[3] = new int[4]; 
    array[4] = new int[5]; 
    array[5] = new int[6]; 
    array[6] = new int[7]; 
    array[7] = new int[8]; 
    array[8] = new int[9]; 
    array[9] = new int[10]; 

Hier ist mein Code;

int array[][] = new int[10][]; 
    array[0] = new int[1]; 
    array[1] = new int[2]; 
    array[2] = new int[3]; 
    array[3] = new int[4]; 
    array[4] = new int[5]; 
    array[5] = new int[6]; 
    array[6] = new int[7]; 
    array[7] = new int[8]; 
    array[8] = new int[9]; 
    array[9] = new int[10]; 

    for (int i = 0; i < 10; i++){ 
     for (int j = 0; j < i + 1; j++) { 
      array[i][j] = i + j; 
     } 
    } 
    for (int i = 0; i < 10; i++) { 
     for (int j = 0; j < i + 1; j++) 
      System.out.printf("%-4d",array[i][j]); 
     System.out.println(); 
    } 

} 

}

+0

Sie scheinen eine 'for' Schleife an anderer Stelle im Code erfolgreich zu verwenden, so etwas macht es schwierig, die Array-Erstellung in eine Schleife zu konvertieren? – Kayaman

+0

ich meine, wie man diese Schleife kombiniert; für (int k = 0; k

+0

Warum möchten Sie es mit den anderen kombinieren? – Kayaman

Antwort

1

Für eine generische Lösung, wenn Sie die Länge des Arrays zu ändern entscheiden

int array[][] = new int[10][]; 

for (int i = 0; i < array.length; i++) { 
    array[i] = new int[i + 1]; 
} 

Sie auch die zwei Schleifen wie

for (int i = 0; i < array.length; i++) { 
     array[i] = new int[i + 1]; 
     for (int j = 0; j < i + 1; j++) { 
      array[i][j] = i + j; 
     } 
    } 
0

wie über dieses?

for (int i = 0; i < 10; i++){ 
    array[i] = new int[i + 1] 
} 

oder für den bloßen Spaß es funktionell zu machen (nicht über andere Aspekte fragen)

//just the empty array 
int[][] array = IntStream.range(0, 10) 
         .map(i -> i + 1) 
         .mapToObj(int[]::new) 
         .toArray(int[][]::new); 

Oder initialisieren und das Array in funktionalem Stil füllen:

//the array with values 
int[][] array = IntStream.range(0, 10) 
         .mapToObj(v -> IntStream.range(v, v + v + 1).toArray()) 
         .toArray(int[][]::new); 

Und sogar die Ausgabe auf diese Weise:

String out = Arrays.stream(array) 
        .map(x -> Arrays.stream(x) 
            .mapToObj(y -> String.format("%-4d", y)) 
            .collect(Collectors.joining())) 
        .collect(Collectors.joining("\n")); 
System.out.println(out); 
+0

Ich frage mich, was dieses Symbol -> tun? Ich bin ein Anfänger und ich würde gerne lernen. Danke –

+1

es definiert einen Lambda-Ausdruck, Sie könnten es lesen "gegeben den Wert (e) auf der linken Seite, tun Sie die Dinge auf der rechten Seite". I.e. 'i -> i + 1 'wird übersetzt,' gegebener Wert i, berechne i + 1 (und gebe es zurück, da map() Rückgabewert erwartet) ' –

1

Sie innerhalb der Schleife die Initialisierung bewegen könnte versuchen, kombinieren könnte

int array[][] = new int[10][]; 

for (int i = 0; i < 10; i++){ 
    array[i] = new int[i + 1]; 
    for (int j = 0; j < i + 1; j++) { 
     array[i][j] = i + j; 
    } 
} 
for (int i = 0; i < 10; i++) { 
    for (int j = 0; j < i + 1; j++) 
     System.out.printf("%-4d",array[i][j]); 
    System.out.println(); 
} 
0

Mit Java 8:

Integer[][] a = new ArrayList<Integer[]>(Collections.nCopies(10, new Integer[0] )) 
.stream() 
.map(p -> new Integer[p.length +1]) 
.toArray(size -> new Integer[size][]); 
0

Code kürzer jetzt thanx :)

int array[][] = new int[10][]; 

    for (int i = 0; i < array.length; i++) 
    { 
     array[i] = new int[i + 1]; 

     for (int j = 0; j < i + 1; j++) 
     { 
      array[i][j] = i + j; 
     } 
    } 
    for (int[] row : array) 
    { 
     for(int k:row) 
      System.out.print(k+ " "); 
     System.out.println(); 
    }