2016-12-02 6 views
1

Ich versuche ID für Elemente zu machen. Aber nach A6 B6 .., wird es auf Null gesetzt.Nested Loop Pattern Return Null

Die Mindestanzahl der Artikel ist 0 und max ist 36. Das Muster

A1-A6 B1-B6 C1-C6- D1-D6 E1-E6 F1-F6

sollte

Zum Beispiel, wenn ich 32 Gegenstände habe. Die ID sollte bei F2 aufhören.

Mein Code:

public void printMenu() { 

     System.out.println("\nMenu:"); 
     System.out.printf("%s%9s%14s%8s\n", "Item#", "Item", "Price", "Qty"); 

     char letter = 'A'; 
     for (int i = 0; i < stock.length; ++i) { 
      for (int j = 1; j < 7; j++) { 
       stock[i].setId(letter + "" + j); 
       i++; 
      } 
      letter++; 
     } 

    for (int i = 0; i < stock.length; ++i) { 
     System.out.printf("%s%15s%13s%8s\n" , stock[i].getId() ,stock[i].getDescription(), 
       (stock[i].getPrice()),stock[i].getQuantity()); 
     } 
    } 

Der Ausgang:

Menu: 
    Item#  Item   Price  Qty 
    A1  Gummies   -1.0  -1 
    A2   Chips   -1.0  -1 
    A3  Raisins   -1.0  -1 
    A4  Pretzels   -1.0  -1 
    A5   Cookie   -1.0  -1 
    A6  Peanuts   -1.0  -1 
    null  Gummies   -1.0  -1 
    B1  Gummies   -1.0  -1 
    B2   Chips   -1.0  -1 
    B3  Raisins   -1.0  -1 
    B4  Pretzels   -1.0  -1 
    B5   Cookie   -1.0  -1 
    B6  Peanuts   -1.0  -1 
    null  Gummies   -1.0  -1 
    C1  Gummies   -1.0  -1 
    C2   Chips   -1.0  -1 
    C3  Raisins   -1.0  -1 
    C4  Pretzels   -1.0  -1 
    C5   Cookie   -1.0  -1 
    C6  Peanuts   -1.0  -1 
    null  Gummies   -1.0  -1 
    D1  Gummies   -1.0  -1 
    D2   Chips   -1.0  -1 
    D3  Raisins   -1.0  -1 
    D4  Pretzels   -1.0  -1 
    D5   Cookie   -1.0  -1 
    D6  Peanuts   -1.0  -1 
    null  Gummies   -1.0  -1 
    E1  Gummies   -1.0  -1 
    E2   Chips   -1.0  -1 
    E3  Raisins   -1.0  -1 
    E4  Pretzels   -1.0  -1 
    E5   Cookie   -1.0  -1 
    E6  Gummies   -1.0  -1 
+0

wo Sie angeben, dass Sie 32 Artikel in Code? – Jobin

+0

Die Dateien können bis zu 36 Artikel haben, die die endgültige F6. –

+0

Können Sie die Stock-Klasse auch für einige Tests bereitstellen? – GOXR3PLUS

Antwort

3

Bearbeiten - Erläuterung Beispiel:
Eine detaillierte Erläuterung.
Die Ausgabe dieser Schleife, wenn Sie genau sehen, der Wert von i wird von 5-7 übersprungen, so Array an Position 6 wurde unberührt. Die Eigenschaft id wird nicht festgelegt. Blick auf Linie 5 A6 - 7 B1 nach A6, Index von 7 aktualisiert wurde und nicht 6.

int stock[] = new int[40]; 
char letter = 'A'; 

// After j loop exists, here i again gets incremented. 
for (int i = 0; i < stock.length; ++i) { 
    for (int j = 1; j < 7; j++) { 
     System.out.println(i + " " + letter + j); 
     i++; // This increments the value of i 
    } 
    letter++; 
} 

0 A1 
1 A2 
2 A3 
3 A4 
4 A5 
5 A6 
7 B1 
8 B2 
9 B3 
10 B4 
11 B5 
12 B6 
14 C1 
15 C2 
16 C3 
17 C4 
18 C5 
19 C6 
21 D1 
22 D2 
23 D3 
24 D4 
25 D5 
26 D6 
28 E1 
29 E2 
30 E3 
31 E4 
32 E5 
33 E6 
35 F1 
36 F2 
37 F3 
38 F4 
39 F5 
40 F6 

Ursprüngliche Antwort:

Der Wert von i in der verschachtelten Schleife, zweimal inkrementiert wird das Überspringen einen Wertes ganz wann immer j Schleife endet.

for (int i = 0; i < stock.length; ++i) { // After j loop exists, here i again gets incremented. 
     for (int j = 1; j < 7; j++) { 
      stock[i].setId(letter + "" + j); 
      i++; // This increments the value of i 
     } 
     letter++; 
    } 

Sie können die Inkrementierung von i in i Schleife entfernen.

for (int i = 0; i < stock.length;) { 
     for (int j = 1; j < 7; j++) { 
      stock[i].setId(letter + "" + j); 
      i++; // This increments the value of i 
     } 
     letter++; 
    } 

oder eine Weile benutzen außerhalb

int i = 0; 
while(i < stock.length) { 
     for (int j = 1; j < 7; j++) { 
      stock[i].setId(letter + "" + j); 
      i++; // This increments the value of i 
     } 
     letter++; 
    } 
+0

Ich bin nicht davon überzeugt, dass die Schleife das Problem ist. Wenn Sie nur den Wert ausdrucken, sehen Sie A1-F6 korrekt gedruckt. – Makoto

+0

Ich verstehe nicht den Grund für Down-Stimmen. Wenn Sie die Schleifen genau analysieren, überspringt sie nach dem Initialisieren eines ganzen Zeichens immer einen Platz im tatsächlichen Array. Dies ist der Grund für null in der Ausgabe. –

+0

Ich stimme @BandiKishore zu. Das Problem ist mit der Schleife, warum die Downvotes. Stimmt etwas nicht mit der Erklärung? –