如果标题不清楚,请注意。我不太确定如何说出来。
所以我有静态游戏类。此Game类包含多个ArrayLists作为类变量。
我的工作是尽可能减少游戏。为此,我实现了一个reduce(Game)函数,它执行下一个缩减步骤。
当然,reduce函数会编辑存储在Game类下的数组列表。例如,它将删除不需要的转弯。
我有一个可缩减(游戏)功能,如果游戏可以减少更多,则返回true。该函数迭代各种移动,如果不需要移动则返回true,否则返回false。
我遇到的问题是,reducable函数正在尝试使用/查找在迭代之前删除的移动。
例如,如果我尝试:
while(reducable(game))
reduce(game);
我从reducable得到一个数组索引超出范围的错误,因为它使用原始数组大小而不是新大小。
如果我依赖输入或计数器之类的东西那么它可以正常工作
while(!scanner.nextLine().contains("stop"))
reduce(game);
然而,这不是一个合理的解决方案,因为我试图让它自动执行,我不知道需要多少减少。
以下是我使用的代码的基础
public static void performReduction(Game game){
int i = 0;
while(reducable(game)){
reduce(game);
}
}
public static boolean reducable(Game game){
for(int i = 0; i < game.turns.get(0).size(); i++){
for(int j = 0; j < game.turns.get(1).size(); j++){
if(notNeeded(....))
return true;
}
}
return false;
}
public static boolean notNeeded(Game g, int p){
for(int i = 0; i < game.turns.get(p).size(); i++){
for(int j = 0; j < game.turns.get(p).size(); j++){
if(....)
return truel
}
}
return false;
}
问题,或多或少: reduce函数从Game中的列表中删除信息。 (即轮流) 执行while循环的条件函数需要迭代这些函数以确定是否可以减少。 尝试访问不再存在的列表索引时出现越界错误。
我尝试将reducable函数用作类函数,但结果相同。我也试过减少返回一个Game实例,并使用递归,但也给出了相同的结果。
`