1

当谈到 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、1、0 2、0 3、0 等的插槽,直到它应该将 Y 轴增加一,它永远不会增加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 的值?对不起,如果我听起来像个白痴,我就是个菜鸟。

4

6 回答 6

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值获取对象。您需要基于i并获取对象j才能获取所有值。或者您可以只遍历s(if sis a Collection) 中的所有对象:

for (Slot sl : s) {
    System.out.println(sl);
}
于 2013-04-24T09:05:37.107 回答
1

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

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

正如现在实施的那样,您s从索引中打印项目0- >width一遍又一遍地打印height

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

甲骨文教程

于 2013-04-24T09:06:18.183 回答
1

j值仅介于 0 之间,width - 1因此只会s.get(j)访问. 试试这个:widths

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循环进行检索。

于 2013-04-24T09:06:25.453 回答
1

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

for(Slot slot : s )
{
    System.out.println(slot);
}
于 2013-04-24T09:09:28.723 回答
0

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

于 2013-04-24T09:07:41.083 回答
0

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

使用二维数组代替 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("");
    }
于 2013-04-24T09:09:51.570 回答