2016-12-02 1 views
1

Я пытаюсь сделать id для элементов. Но после A6 B6 .. он устанавливает значение null.Вложенный шаблон цикла return null

Минимальное число п равно 0, а Макс 36. шаблон должен быть

А1-А6 В1-В6 C1-C6- D1-D6, Е1-Е6 F1-F6

Например, если у меня есть 32 элемента. Идентификатор должен остановиться на 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

, где вы указываете, что у вас есть 32 элементов в коде? – Jobin

+0

В файлах может быть до 36 элементов, что и для финального F6. –

+0

Можете ли вы также предоставить класс Stock для некоторых тестов? – GOXR3PLUS

ответ

3

Edit - Объяснение с примером:
подробное объяснение.
Выход этого цикла, если вы видите, значение 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++; 
    } 

или использовать какое-то время за пределами

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

Я не понимаю причины пустых голосов. Если вы внимательно анализируете циклы, после инициализации целого символа он всегда пропускает одно место в фактическом массиве. Это является причиной появления нулевого значения. –

+0

Я согласен с @BandiKishore. Проблема связана с циклом, почему downvotes. Что-то не так с объяснением? –