【问题标题】:Nested for loop output printing and formatting incorrect table, it's all funky嵌套for循环输出打印和格式化不正确的表格,这一切都很时髦
【发布时间】:2019-03-22 02:04:35
【问题描述】:

所以目标是使用嵌套的 for 循环来输出 6 行和 10 列。问题是,内部 for 循环应该检查数字是偶数还是奇数,因为如果是偶数,我们会在其上加 2,然后在移动到下一个输出之前打印出该数字 10 次。所以这是应该得到的

1 1 1 1 1 1 1 1 1 1  
4 4 4 4 4 4 4 4 4 4  
3 3 3 3 3 3 3 3 3 3   
6 6 6 6 6 6 6 6 6 6  
5 5 5 5 5 5 5 5 5 5  
8 8 8 8 8 8 8 8 8 8 

我以为我在正确的轨道上,但我的输出完全是一团糟,这就是我所拥有的。感谢任何愿意提供帮助的人。

for (int numberE = 1; numberE <= 6; numberE++)
{
    for (int nestedE = 1; nestedE < 10; nestedE++)
    {
        if (numberE%2 == 0)
        {
            numberE += 2;
            System.out.printf("%2d", numberE);
        }   else {
              System.out.printf("%2d", numberE);
        }
    }
    System.out.printf("%2d\n", numberE);
}

【问题讨论】:

  • 在嵌套循环内修改numberE?确定这是你想做的吗?会影响外循环的结束条件/

标签: java for-loop nested formatting output


【解决方案1】:

从你的内部循环开始只会迭代九次。其次,您不需要嵌套循环,您需要一个循环和一个守卫来确定何时打印。

【讨论】:

  • 是的,没错,只是我需要练习 for 循环,因为这次是必需的。
【解决方案2】:

不要在循环内修改 numberE。而是打印 numberE + 2。

此外,如果您的内部循环从 0 运行到

for (int numberE = 1; numberE <= 6; numberE++)
{
    for (int nestedE = 0; nestedE < 10; nestedE++) // <-- start at 0 and end <10 for 10 iterations
    {
        if (numberE%2 == 0)
        {
            System.out.printf("%2d", numberE + 2); // <-- print the number + 2
        } else {
            System.out.printf("%2d", numberE);
        }
    }
    System.out.println(); // <-- don't print the value again here
}

【讨论】:

  • 由于我是从0开始的,所以我必须使用
  • 很高兴看到我至少接近结果。我可能应该使用调试器来捕捉在嵌套循环中调整 numberE 的错误程度。话虽如此,我会记住您对换行部分所说的话,因为它看起来经常会派上用场。感谢您的帮助。
【解决方案3】:

我会这样做。给出所需的结果。

public class NestedForLoop {

public static void main(String[] args) {
    for (int i = 1; i <= 6; i++)
    {
        int temp = i;
        if(temp%2 == 0) {
            temp +=2;
        }
        for(int j=1;j<=10;j++) {
            System.out.print(temp+" ");
        }
        System.out.println();
    }
}

}

这里发生的事情的简要说明: 所以,因为我们需要 6 行,所以我们使用 6 作为行计数器。变量 i 负责保持行数。这里因为目标是 6,所以我们从第 1 行开始直到第 6 行。在循环的每个值中,我们将 i 的值保存到 temp,因为我们不希望 i 的值在递增之前改变主 for 循环。然后,我们通过对 2 进行模除来检查此温度值是否为偶数。如果是偶数,我们将温度值增加 2。
然后,我们运行一个从 1 到 10 的循环,因为我们需要 10 列来打印值 temp(原始 i 或递增,因为它是偶数)。退出循环后,最终移动到下一行,我们执行 System.out.println()。

【讨论】:

  • @Jason - 你是对的。在将来发布我自己的解决方案之前,在更正解决方案时会更加小心。谢谢。
  • 我建议您只添加一个说明,说明您为什么按照您的方式执行这些步骤,以便 OP 了解您的方法。
  • 把这一切都写在你的答案中。
【解决方案4】:

我建议使用临时变量来存储当前的预期值。

您的解决方案的问题是您在第二个 for 循环中使用 numberE += 2; 修改了 numberE 的值,这会全局更改该值。

将最后一列移到嵌套的 for 循环中也更容易,因为您不需要在循环之外定义临时变量。使用它也意味着将&lt;10 更改为&lt;=10

for (int numberE = 1; numberE <= 6; numberE++) {
   for (int nestedE = 1; nestedE <= 10; nestedE++) {
     int current = (numberE % 2 == 0) ? numberE + 2 : numberE;
     System.out.printf("%2d", current);
   }
System.out.printf("\n");
}

不过你已经很接近了,通过练习你会变得更好。

【讨论】:

  • @Jason 就效率而言,您是对的,我没有考虑将最终的 println() 放在第二个循环之外。我理解您对以最少更改量给出答案的意见,但是我相信我已经解释了我的答案以及为什么我觉得它更好。据我了解,OP 是嵌套循环的新手。通过给出一个简单的答案,它将比我只是尽可能少地修改 OP 的代码并指出 OP 出错的地方对 OP 的帮助更大。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-04
  • 1970-01-01
  • 2019-02-27
  • 1970-01-01
  • 2021-09-28
  • 1970-01-01
  • 2012-09-14
相关资源
最近更新 更多