Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ArrayList没有';我们不能生产我们想要的_Java - Fatal编程技术网

Java ArrayList没有';我们不能生产我们想要的

Java ArrayList没有';我们不能生产我们想要的,java,Java,我们正在为第二届Semester java stuff做一个小项目,并试图修复一个bug,现在大约1个小时。我们做不到。我们的问题如下: 我们必须用可变的棋盘大小、可变的玩家数量和KI来编程一个小halma游戏。目前,我们无法计算每个球员的确切起始区域 这就是我们的函数的样子: /** * Calculates a standard Start area as seen in the task definition dependend on the number of * figures

我们正在为第二届Semester java stuff做一个小项目,并试图修复一个bug,现在大约1个小时。我们做不到。我们的问题如下:

  • 我们必须用可变的棋盘大小、可变的玩家数量和KI来编程一个小halma游戏。目前,我们无法计算每个球员的确切起始区域
这就是我们的函数的样子:

/**
 * Calculates a standard Start area as seen in the task definition dependend on the number of
 * figures we want according to the number of players
 * @return list of cells
 */
public ArrayList<Cell> calculateArea(int modifier) {
    ArrayList<Cell> cells = new ArrayList<Cell>();

    for (int x = 0; x <= 4 - modifier; x++) {
        for (int y = 0; y <= 4 - modifier; y++) {
            if (y <= 1){
                cells.add(new Cell(x, y));
            }
            else if (y == 2) {
                if(x <= 3 - modifier) {
                    cells.add(new Cell(x, y));
                }
                else {
                    break;
                }                   
            }
            else if (y == 3) {
                if (x <= 2 - modifier) {
                    cells.add(new Cell(x, y));
                }
                else {
                    break;
                }
            }
            else if (y == 4) {
                if(x <= 1) {
                    cells.add(new Cell(x, y));
                }
                else {
                    break;
                }
            }
        }
    }
    return cells;
}
/**
*根据任务数量计算任务定义中显示的标准开始区域
*根据球员人数我们想要的数字
*@返回单元格列表
*/
公共ArrayList calculateArea(整型修饰符){
ArrayList单元格=新的ArrayList();

对于(int x=0;x Hm,一个小时对我来说似乎不算多。不要放弃。您已经意识到了第一个问题。如果您对方法
rotateRight()
的意图是保持输入列表不变,那么您必须先复制列表(深度复制)。您可以创建一个大小相同的新
ArrayList
,并克隆原始列表的每个
单元格
实例。查看和界面。对于第二个问题,我们需要更多有关您期望的内容和实际数据差异的信息。您的数据结构不是自解释的。我们甚至不知道
Board
Cell
正是以及
Cell
对象列表与真实游戏的关系。对于16x16棋盘游戏,模型的第一个数据结构是我脑海中出现的二维单元格数组。为什么要使用
ArrayList
?它只是一维。
/**
 * Rotates a given area of Cells to the right according to board size
 * is used to calculate Starting and Target areas for each player
 * @param area
 * @return
 */
private ArrayList<Cell> rotateRight(ArrayList<Cell> area, int modifier) {
    for(Cell c : area) {
        if(modifier == 0) {
            // 19 Figures
            if(c.getY() <= 1) {
                c.setX(c.getX() + Board.getSize() - 5);
            }
            else if(c.getY() == 2) {
                c.setX(c.getX() + Board.getSize() - 4);
            }
            else if(c.getY() == 3) {
                c.setX(c.getX() + Board.getSize() - 3);
            }
            else {
                c.setX(c.getX() + Board.getSize() - 2);
            }
        }
        else {
            // 13 Figures
            if(c.getY() <= 1) {
                c.setX(c.getX() + Board.getSize() - 4);
            }
            else if(c.getY() == 2) {
                c.setX(c.getX() + Board.getSize() - 3);
            }
            else if(c.getY() == 3) {
                c.setX(c.getX() + Board.getSize() - 2);
            }
        }               
    }
    return area;
}

/**
 * Rotates a given area of Cells down according to board size
 * is used to calculate Starting and Target areas for each player
 * @param area
 * @return
 */
private ArrayList<Cell> rotateDown(ArrayList<Cell> area, int modifier) {
    for(Cell c : area) {
        if(modifier == 0) {
            // 19 Figures
            if(c.getX() <= 1) {
                c.setY(c.getY() + Board.getSize() - 5);
            }
            else if(c.getX() == 2) {
                c.setY(c.getY() + Board.getSize() - 4);
            }
            else if(c.getX() == 3) {
                c.setY(c.getY() + Board.getSize() - 3);
            }
            else {
                c.setY(c.getY() + Board.getSize() - 2);
            }
        }
        else {
            // 13 Figures
            if(c.getX() <= 1) {
                c.setY(c.getY() + Board.getSize() - 4);
            }
            else if(c.getX() == 2) {
                c.setY(c.getY() + Board.getSize() - 3);
            }
            else if(c.getX() == 3) {
                c.setY(c.getY() + Board.getSize() - 2);
            }
        }
    }
    return area;
}