【问题标题】:For some reason loop doesn't print out correct array values由于某种原因,循环不会打印出正确的数组值
【发布时间】:2019-04-11 21:06:03
【问题描述】:

我在打印数组时无法获得正确的输出。基本上我要做的是在 main 方法中设置一个数组,然后将该数组发送到另一个方法,该方法会打印出如下内容:

   89   12   33   7   72   42   76   49
   69   85   61   23

右边有 3 个空格,并在第 8 个数字之后开始新的打印行。看起来很容易,但我得到了这样的东西。

   89
   69   85   61   23

由于某种原因,它不会打印出位置 1 和 7 之间的值。这就是我所拥有的。

public class Test
{
    public static void main (String [] args)
    {
        int [] myInches = {89,12,33,7,72,42,76,49,69,85,61,23};
        printArrayValues(myInches);
    }

    public static void printArrayValues(int [] myInchesParam) {
        for (int i = 0; i < 8; i++) {
            System.out.print("   " + myInchesParam[i]);
            System.out.println();
            for (i = 8; i < 12; i++) {
                System.out.print("   " + myInchesParam[i]);
            }
        }
    }
}

我应该改用 do-while 吗?或者我仍然可以使用 for 循环来做,而我只是做错了吗?

【问题讨论】:

  • 您在内部循环中将 i 重置为 8。
  • 你的 8-11 循环在 inside 你的 0-7 循环,并且使用相同的循环变量。
  • 使用} 在第二个循环开始之前关闭第一个循环。
  • 将内部 for 循环移动到第一个循环之后。或者,摆脱内部for 循环,让外部循环遍历所有值,并且仅在i % 8 === 7 时使用System.out.println
  • 在第二个 for 循环中使用另一个变量,i 已在第一个循环中定义

标签: java arrays loops output


【解决方案1】:

有很多方法可以解决这个问题,但一种是使用模运算符来检查是否已经打印了 8 个条目。您将 1 添加到 i 因为您的数组索引为 0。

   for (int i = 0; i < myInchesParam.length; i++) {      
        System.out.print(myInchesParam[i] + "   ");
        if((i + 1) % 8 == 0) {
            System.out.println();
        }
   }

编辑:这种方法的好处是它适用于任何数组长度。其他一些建议不会。

【讨论】:

    【解决方案2】:

    嗯,发生的事情是在循环中 i 从 0 开始,然后当它到达第二个循环时,您将 i 设置为 8,因此条件 i

        for (int i = 0; i < 8; i++) {
            System.out.print("   " + myInchesParam[i]);
        }
        System.out.println();
        for (i = 8; i < 12; i++) {
                System.out.print("   " + myInchesParam[i]);
        }
    
    

    相反。 更好的可能是

        for (int i = 0; i < 12; i++) {
            System.out.print("   " + myInchesParam[i]);
            if(i==7) {
              System.out.println();
            }
        }
    

    【讨论】:

      【解决方案3】:

      问题是您在两个嵌套的for 循环中使用了相同的变量。这将导致外部数组在第一次迭代后停止并仅打印第二行中的值。

      如果i &gt; 0 &amp;&amp; i % 8 == 0,只需使用一个循环并打印一个新行:

      public static void printArrayValues(int[] myInchesParam) {
          for (int i = 0; i < myInchesParam.length; i++) {
              if (i > 0 && i % 8 == 0)
                  System.out.println();
              System.out.print("   " + myInchesParam[i]);
          }
      }
      

      或者,您也可以在之后使用 i % 8 === 7 插入新行:

      public static void printArrayValues(int[] myInchesParam) {
          for (int i = 0; i < myInchesParam.length; i++) {
              System.out.print("   " + myInchesParam[i]);
              if (i % 8 == 7)
                  System.out.println();
          }
      }
      

      但在某些情况下,最后一个解决方案可能会有一个尾随的新行。

      【讨论】:

        猜你喜欢
        • 2021-03-26
        • 2021-06-04
        • 1970-01-01
        • 2015-02-09
        • 1970-01-01
        • 2018-06-16
        • 1970-01-01
        • 2021-08-23
        • 2011-10-12
        相关资源
        最近更新 更多