【问题标题】:Nested loop pattern return null嵌套循环模式返回 null
【发布时间】:2016-12-02 04:32:12
【问题描述】:

我正在尝试为项目制作 ID。但在 A6 B6.. 之后,它设置为空。

项目的最小数量为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

【问题讨论】:

  • 您在哪里指定代码中有 32 项?
  • 文件最多可以有 36 项,最终 F6.
  • 能否也为一些测试提供 Stock 类?

标签: java for-loop nested-loops


【解决方案1】:

编辑 - 示例说明:
详细的解释。
这个循环的输出,如果你仔细看,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++;
    }

【讨论】:

  • 我不相信循环是问题所在。如果只打印出值,您会看到 A1-F6 打印正确。
  • 我不明白投反对票的原因。如果您仔细分析循环,在初始化整个字符后,它总是会跳过实际数组中的一个位置。这就是输出中为 null 的原因。
  • 我同意@BandiKishore。问题在于循环,为什么不赞成。解释有问题吗?
  • 解释不太清楚。我承认我只看输出的错误。这是正确的。
  • @swis 欢迎!你能接受答案并结束问题吗?
猜你喜欢
  • 2021-04-21
  • 1970-01-01
  • 1970-01-01
  • 2015-08-21
  • 2021-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多