【问题标题】:Java array of objects,arraylist of objects problem [closed]Java对象数组,对象数组列表问题[关闭]
【发布时间】:2021-07-19 01:09:22
【问题描述】:

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

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

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

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

我想将这些 Players 传递给 2D 数组。因此,例如,如果有 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

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

【问题讨论】:

  • 不清楚是什么问题。你能比“它不起作用”更具体吗?你认为为什么会陷入无限循环?这应该很容易测试。
  • 需要更多关于实际问题的代码和信息。程序的错误或输出是什么(如果没有,打印出变量)?具体有什么不行的?那些Enemies 在那里做什么?为什么会有PlayersPlayer 类?
  • 与编写程序并行,学习如何调试它们。例如。使用 IDE 的单步执行功能来遵循程序的控制流程。观察变量的内容——它们是否包含预期值?这样一来,您肯定会比任何人都更清楚地发现问题所在,因为没有人比您更清楚会发生什么。
  • 感谢所有回复!我想是无限循环,因为在我运行程序后什么也没发生,只是加载了一个小时,所以我停止了它。

标签: java arrays object arraylist


【解决方案1】:
   do{} while (!listofplayers.isEmpty()); this Loop will run infinite if listofplayers doesn't become empty

【讨论】:

  • 是的,我也注意到了,但它应该是空的,因为“it.remove”部分,不是吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多