Java 如何将ArrayList中的每个数字放入变量中
所以,我正在创建一个游戏,当用户的玩家点击一个位置(有很多)时,我希望游戏结束 我有两个像这样的Java 如何将ArrayList中的每个数字放入变量中,java,arrays,list,arraylist,processing,Java,Arrays,List,Arraylist,Processing,所以,我正在创建一个游戏,当用户的玩家点击一个位置(有很多)时,我希望游戏结束 我有两个像这样的ArrayLists ArrayList<Integer> ex = new ArrayList<Integer>(), ey = new ArrayList<Integer>(); 如果我像这样循环遍历整个arrayList (int i : ex) 然后在开始游戏时,它会给我以下错误: Exception in thread "Animation Threa
ArrayLists
ArrayList<Integer> ex = new ArrayList<Integer>(), ey = new ArrayList<Integer>();
如果我像这样循环遍历整个arrayList
(int i : ex)
然后在开始游戏时,它会给我以下错误:
Exception in thread "Animation Thread" java.lang.IndexOutOfBoundsException: Index: 10, Size: 1
at java.util.ArrayList.rangeCheck(ArrayList.java:653)
at java.util.ArrayList.get(ArrayList.java:429)
at snakegame.SnakeGame.draw(SnakeGame.java:113)
at processing.core.PApplet.handleDraw(PApplet.java:2386)
at processing.core.PGraphicsJava2D.requestDraw(PGraphicsJava2D.java:240)
at processing.core.PApplet.run(PApplet.java:2256)
at java.lang.Thread.run(Thread.java:745)
那么,是否有办法将ArrayList的所有数字存储在一个变量中?您会对“增强型for”的语义感到困惑 将值
ex.get(0)
,ex.get(1)
放入i
中。它是内容
在第二种情况下,逻辑应该是
int j = 0;
for (int i : ex) {
if(x.get(0) == i && y.get(0) == ey.get(j)){
..
}
j++;
}
在这种情况下,增强的for没有什么意义
如果它有助于可视化,那么使用增强型for时,变量必须始终是数组/迭代器的类型(在这种情况下,恰好可以将outbox
Integer
自动输出到int
)您对“增强型for”的语义感到困惑
将值ex.get(0)
,ex.get(1)
放入i
中。它是内容
在第二种情况下,逻辑应该是
int j = 0;
for (int i : ex) {
if(x.get(0) == i && y.get(0) == ey.get(j)){
..
}
j++;
}
在这种情况下,增强的for没有什么意义
如果它有助于可视化,那么对于增强型for,变量必须始终是数组/迭代器的类型(在本例中,您可以将整型自动输出到
int
)据我所知,您有一个x,y网格,其中存在导致用户死亡的坐标。当用户在网格中移动时,您需要检查他们当前所在的正方形是否为坏正方形
与其使用两个ArrayList,不如将其存储为一个数组
类网格{
私有int[][]空间;
公共电网(int xdim、int ydim){
空格=新整数[xdim][ydim];
对于(int x=0;x,据我所知,您有一个x,y网格,其中有导致用户死亡的坐标。当您的用户在网格中移动时,您希望检查他们当前所在的正方形是否为坏正方形
与其使用两个ArrayList,不如将其存储为一个数组
类网格{
私有int[][]空间;
公共电网(int xdim、int ydim){
空格=新整数[xdim][ydim];
for(int x=0;xDid)在循环之前是否测试数组列表大小?如果出现IndexOutOfBoundsException,则列表可能为空。请在for循环之前尝试System.out.print(ex.size());您应该提供一些更详细的信息。什么是x
,什么是y
(对象o:ArrayList)是使用迭代器循环遍历ArrayList的正确方法。@DavidJones,x&y存储角色的位置,ex和ey存储敌人位置,而不是存储两个可能彼此不同步的ArrayList,我强烈建议将x,y坐标封装在一个类中,例如坐标(x,y)
或使用现有的点
类。然后您可以拥有一个ArrayList
。此外,当循环i
将错过列表中的最后一项(如果不是预期的)啊,是的,这是真的,我很快就会这样做,谢谢!我没有像我应该的那样有条理!在循环之前你测试过数组列表大小吗?如果你得到IndexOutOfBoundsException,列表可能是空的。请尝试System.out.print(ex.size());在for循环之前。您应该提供一些更详细的信息。什么是x
,什么是y
?什么是ex
和ey
store?`for(对象o:ArrayList)是使用迭代器循环遍历ArrayList的正确方法。@DavidJones,x&y存储角色的位置,ex和ey存储敌人位置,而不是存储两个可能彼此不同步的ArrayList,我强烈建议将x,y坐标封装在一个类中,例如坐标(x,y)
或使用现有的点
类。然后您可以拥有一个ArrayList
。此外,当循环i
将错过列表中的最后一项(如果不是预期的)啊,是的,那是真的,我很快就会这么做的,谢谢你!我没有像我应该的那样有条理!哇,非常感谢你!像符咒一样工作,我以前从未见过这种用法,所以我很高兴我学到了一些东西。哇,非常感谢你!像符咒一样工作,我以前从未见过这种用法,所以我很高兴我学到了一些东西。这实际上是一个非常好的主意,我会的当然,添加这个并亲自尝试!谢谢添加这个。这实际上是一个非常好的主意,我一定会添加这个并亲自尝试!谢谢添加这个。
for(int i : ex) {
int j = 0;
for (int i : ex) {
if(x.get(0) == i && y.get(0) == ey.get(j)){
..
}
j++;
}
class Grid {
private int[][] spaces;
public Grid(int xdim, int ydim) {
spaces = new int[xdim][ydim];
for (int x=0; x<xdim; x++) {
for (int y=0; y<ydim; y++) {
spaces[x][y] = 0;
}
}
}
private void addBadSpace(int x, int y) {
spaces[x][y] = 999;
}
private boolean isBadSpace(int x, int y) {
return (spaces[x][y] != 0);
}
}