我正在尝试为物品制作ID。但是在A6 B6 ..之后,它设置为null。
项目的最小数量为0,最大值为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 :(得分:3)
编辑 - 用例子说明:
详细说明。
这个循环的输出,如果仔细观察,i的值将从5-7跳过,因此位置6的数组不受影响。导致id
属性未设置。 在A6之后查看行5 A6 - 7 B1
,更新索引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++;
}