【问题标题】:Missing int in nested for loops嵌套 for 循环中缺少 int
【发布时间】:2013-11-27 04:57:35
【问题描述】:

以下代码:

for (i = 1; i <= 5; i++)
{
    System.out.println();
    for (j = 1; j <= i; j++) {
        System.out.print(" ");
        System.out.print(j);
    }
}

产生:

 1
 1 2
 1 2 3
 1 2 3 4
 1 2 3 4 5

移除大括号:

int i = 0;
int j = 0;

for (i = 1; i <= 5; i++)
{
    System.out.println();
    for (j = 1; j <= i; j++) 
        System.out.print(" ");
        System.out.print(j);
}

产生:

 2
  3
   4
    5
     6

我可以理解嵌套的 for 循环正在遍历 " " 并打印它们,然后只打印一个 j,但我不明白 j = 1 会发生什么。

【问题讨论】:

标签: java for-loop nested-loops


【解决方案1】:

第一次通过你的 for 循环

  1. 它设置 j = 1,检查 j
  2. 打印出空格
  3. 递增 j,检查 j 这失败了,因为 i = 1 和 j = 2
  4. 退出循环,打印 j 和 j = 2

【讨论】:

  • +1 点是如果你不使用大括号,它只有相邻的行会进入循环
【解决方案2】:

没有大括号的for循环。您在下面提到的代码:

 for (j = 1; j <= i; j++) 
    System.out.print(" ");
    System.out.print(j);

等于下面的代码:

        for (j = 1; j <= i; j++) {
            System.out.print(" ");
        }
        System.out.print(j);

这就是问题所在,试试看吧。

您可以按如下方式更改:

        for (j = 1; j <= i; j++) {
            System.out.print(" ");
            System.out.print(j);
        }

输出将是预期的,例如:

  1
  1 2
  1 2 3
  1 2 3 4
  1 2 3 4 5

【讨论】:

    【解决方案3】:

    我解决了

    System.out.println();
    for (j = 1; j <= i; j++) 
        System.out.print(" ");
        System.out.print(j);
    

    j 在打印之前递增 j++,因为循环在到达 System.out.print(j); 之前已经经历了一次迭代

    【讨论】:

    • +1 如果你不使用大括号,那么只有相邻的行会进入循环。
    【解决方案4】:

    由于它只执行一条语句,因此打印时j 的值比内部循环的上限(2、3、4、5、6)大一。

    【讨论】:

    • 我不完全确定您的意思,但是直到您的代码中的 j &gt; i 之后,for 循环才会结束,并且由于 i 是 1-5,j 将是打印为 2-6,这是使j &lt;= i 条件失败所需的值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多