2016-12-02 6 views
1

アイテムのIDを作成しようとしています。しかし、A6 B6 ..の後、nullに設定されます。ネストされたループパターン戻り値null

アイテムの最小数は0であり、maxは36であるパターンが

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

なければなりません

たとえば、32個のアイテムがあるとします。 IDはF2で停止する必要があります。

マイコード:

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()); 
     } 
    } 

出力:

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

外でしばらくでしょうか? – Jobin

+0

ファイルには最終F6までの項目が最大36個あります。 –

+0

いくつかのテストでStockクラスを提供できますか? – GOXR3PLUS

答えて

3

編集 - 例と説明:
詳細な説明。
このループの出力には、iの値が5から7にスキップされているため、位置6の配列は変更されませんでした。 idプロパティが設定されていません。 ライン5 A6 - 7 B1を見A6は、7のインデックスが更新された後ではなく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 

オリジナル回答:

ネストされたループでiの値は、二回完全に一つの値を飛ばしてインクリメントされjループが終了するたびに。

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++; 
    } 

iループのiの増分を削除できます。

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++; 
    } 

またはあなたがコードの32個のアイテムを持っていることを指定

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

私はループが問題であるとは確信していません。値だけを印刷すると、A1-F6が正しく印刷されます。 – Makoto

+0

私は投票の理由を理解していません。ループを詳細に分析すると、文字全体を初期化した後、実際の配列内の1つの場所が常にスキップされます。これが出力のnullの理由です。 –

+0

私は@BandiKishoreと同意します。問題は、ループとなぜ、downvotesです。説明に何か間違っていますか? –

関連する問題