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

时间:2019-04-11 21:06:04

标签: java arrays loops output

打印数组时,我在获取正确的输出时遇到了一些麻烦。本质上,我想做的是在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]);
            }
        }
    }
}

我应该用做一段时间吗?还是我仍然可以通过for循环来做到这一点,而我只是做错了?

3 个答案:

答案 0 :(得分: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();
        }
   }

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

答案 1 :(得分:1)

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

newlist <- Map(function(x, y) cbind(x@data, unique.id = y), sldfl,  1:length(sldfl))

相反。 甚至更好的可能是

BEGIN

    SELECT order.order_id, SUM(product.price * order_item.quantity)
    FROM `order`
    JOIN `order_item` ON order.order_id = order_product.order_id
    JOIN `product` ON order_product.product_id = product.product_id;
END $$

答案 2 :(得分: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();
    }
}

但是在某些情况下,使用最后一种解决方案可能会出现尾随换行的情况。