java中的多个for循环无法正常工作

时间:2013-04-24 09:01:37

标签: java loops

对于Java而言,我是一个完全新手,我一直致力于创建一个包含多个插槽的网格的简单程序。每个插槽都有一个X和Y值,并存储在名为“s”的ArrayList中。

这是我的代码:

for (int i = 0; i < height; i++) {
    for (int j = 0; j < width; j++) {
        s.add(new Slot(j, i));
    }
}

高度和宽度是用户输入的值。

这是循环中的一个简单循环,基本上它应该可以工作但不是创建多个具有值0,0,0,0,0,0,0等的槽,直到它应该将Y轴增加1永远不会增加Y值。相反,在完成第一个循环后,它将返回0,0而不是0,1。

此处还有打印值的方式:

for (int i = 0; i <= height; i++) {
    for (int j = 0; j <= width; j++) {
        System.out.print(s.get(j));
    }
    System.out.println("");
}

示例:

  

0,0

     

1,0

     

2,0

     

3,0

     

...

     

9,0

     

0,0(而不是0,1)

我的问题是为什么我的第一次循环不会增加i的值?对不起,如果我听起来像个白痴,我就是一个全面的菜鸟。

6 个答案:

答案 0 :(得分:1)

您的打印功能出现问题。

我不知道s是什么,但是:

for (int i = 0; i <= height; i++) {
        for (int j = 0; j <= width; j++) {
            System.out.print(s.get(j));
        }
        System.out.println("");
 }

仅基于j值获取对象。您需要根据ij获取对象才能获取所有值。 或者您可以遍历s中的所有对象(如果sCollection):

for (Slot sl : s) {
    System.out.println(sl);
}

答案 1 :(得分:1)

您的问题是打印功能。只需迭代s并打印每个插槽:

for (Slot slot : s) {
    System.out.println(slot);
}

现在实施,您可以在s索引0 - &gt;中打印项目width一遍又一遍,height次。

此外,了解 for-each 循环,可从Java 5获取,而不是使用get(index)

Oracle Tutorial

答案 2 :(得分:1)

j值的范围仅为0到width - 1,因此s.get(j)只会访问width中的第一个s项。试试这个:

for (int i = 0; i <= height; i++) {
    for (int j = 0; j <= width; j++) {
        System.out.print(s.get(i * width + j));
    }
    System.out.println("");
}

或者您可以迭代s的内容而不使用嵌套的for循环进行检索。

答案 3 :(得分:1)

打印时不需要嵌套循环,只需遍历ArrayList:

for(Slot slot : s )
{
    System.out.println(slot);
}

答案 4 :(得分:0)

每次只能从同一个地方打印j

答案 5 :(得分:0)

问题是你将高度*宽度元素存储在一维数组中--ArrayList但只检索宽度数量的元素。

使用二维数组代替s的Slot的arraylist。

Slot[][] s = new Slot[width][height];

for (int i = 0; i < height; i++) {

    for (int j = 0; j < width; j++) {
        s[j][i](new Slot(j, i));
    }
}

for (int i = 0; i <= height; i++) {
        for (int j = 0; j <= width; j++) {
            System.out.print(s[j][i]);
        }
        System.out.println("");
    }