有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何将ArrayList中的每个数字放入变量中

所以,我正在创建一个游戏,当用户的玩家点击一个位置(有很多)时,我希望游戏结束

我有两个这样的ArrayLists

ArrayList<Integer> ex = new ArrayList<Integer>(), ey = new ArrayList<Integer>();

加电后会出现“坏”方块(如果用户碰到它就会死掉),因此经常会添加Integers

我试图通过for loop循环大小(如下所示),但显然,这不起作用,因为i只选择最新的大小

for(int i = 0; i < ex.size() - 1; i++) {
            if(x.get(0)==ex.get(i) && y.get(0) == ey.get(i)){
                gameover = true;
            }
        }

如果我像这样循环整个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的所有数字存储在一个变量中


共 (2) 个答案

  1. # 1 楼答案

    您对“增强型for”的语义感到困惑

    for(int i = 0; i < ex.size() - 1; i++) {
    

    将值012放入i。。。最多ex.size()-1i用作索引

    for(int i : ex) {
    

    将值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没有什么意义

    如果它有助于可视化,那么使用enhanced for时,变量必须始终是数组/迭代器的类型(在这种情况下,恰好可以自动输出Integerint

  2. # 2 楼答案

    据我所知,你有一个x,y网格,其中有导致用户死亡的坐标。当用户在网格中移动时,您需要检查他们当前所在的正方形是否为坏正方形

    与其使用两个ArrayList,不如将其存储为multidimensional array

    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);
        }
    
    }
    

    是否采用这种方法取决于应用程序和网格的大小。多维数组速度非常快,但会占用大量内存空间。如果它是一个稀疏矩阵(即很少有“坏”空间存在),并且你的网格非常大,那么有更有效的方法