对于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的值?对不起,如果我听起来像个白痴,我就是一个全面的菜鸟。
答案 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
值获取对象。您需要根据i
和j
获取对象才能获取所有值。
或者您可以遍历s
中的所有对象(如果s
是Collection
):
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)
:
答案 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("");
}