Java对象数组,对象数组列表问题

时间:2021-04-25 12:32:30

标签: java arrays object arraylist

我正在上大学的第一门编程课程,我的问题如下:

我有一个 Player 对象的 ArrayList 具有以下属性:

name: String; 
area: int; 
numberofdices: int;

对于每个玩家,Area 初始化为 8,NumberOfDices 初始化为 24。

我想将这些玩家传递给一个二维数组。因此,例如,如果有 3 个玩家,我希望数组看起来像这样:

[ 
    [name: 1, area: 8, numberofdices: 3], 
    [name: 2, area: 8, numberofdices: 2], 
    [name: 3, area: 8, numberofdices: 8]
] 

本质上,我希望所有玩家的区域都为 8,并且我想在区域之间随机划分 NumberOfDices。 (最少 1,最多 8)

尝试了以下方法,但没有奏效:

    public static void random_board(ArrayList<Players> listofplayers,Players[][] gameboard) {
        do {
            for(int row = 0;row < gameboard.length;row++) {
                for(int column = 0;column < gameboard[row].length;column++) {
                    // System.out.println(gameboard[row][column]);
                    if(gameboard[row][column] == null) {
                        Iterator<Players> it = listofplayers.iterator();
                        while (it.hasNext()) {
                            Players i = it.next();
                            Random r = new Random();
                            int number = r.nextInt(8) + 1;

                            if (i instanceof Players) {
                                if (((Players) i).numberofdices - number >= 1 && ((Players i).area  > 1) {
                                    gameboard[row][column] =  new Players(((Players) i).name, 1, number);
                                    ((Players) i).setnumberofdices(((Players) i).getnumberofdices() - number);
                                    ((Players) i).setarea(i.getarea()-1);

                                    if ( ((Players)i).getarea() == 1 ) {
                                        gameboard[row][column] = new Players(((Players)i).name,((Players)i).area,((Players)i).numberofdices);
                                        it.remove();

                                    }
                                }
                            } else if (i instanceof Enemies) {
                                if (((Enemies) i).numberofdices - number >= 1 && ((Enemies) i).area  > 1) {
                                    gameboard[row][column] =  new Enemies(((Enemies) i).name, 1, number,((Enemies)i).getAttacking_mood());
                                    ((Enemies) i).setnumberofdices(((Enemies) i).getnumberofdices() - number);
                                    ((Enemies) i).setarea(i.getarea()-1);

                                    if ( ((Enemies)i).getarea() == 1 ) {
                                        gameboard[row][column] = new Enemies(((Enemies)i).name,((Enemies)i).area,((Enemies)i).numberofdices,((Enemies)i).getAttacking_mood());
                                        it.remove();


                                    }
                                }
                            }
                        }
                    }
                }
            }
        } while (!listofplayers.isEmpty());

我有一个 Enemies 类继承自 Players 类并包含另一个成员变量:attacking_mood

我认为它会进入一个无限循环。

1 个答案:

答案 0 :(得分:1)

   do{} while (!listofplayers.isEmpty()); this Loop will run infinite if listofplayers doesn't become empty
相关问题