由于某种原因,循环不会打印出正确的数组值

问题描述 投票:1回答:3

打印阵列时,我在获取正确输出时遇到一些麻烦。基本上我要做的是在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循环来做它我只是做错了吗?

java arrays loops output
3个回答
1
投票

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

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

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


1
投票

好吧,发生的事情是在循环中我从0开始,然后当它到达第二个循环时你将i设置为8,因此条件i <8不再有效。最简单的修复方法是不嵌套你的循环,但有

    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();
        }
    }

1
投票

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

如果i > 0 && 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();
    }
}

但是在某些情况下,您可以使用最后一个解决方案获得一个尾随的新行。

© www.soinside.com 2019 - 2024. All rights reserved.