我有一个 java 方法 canEatGoat
public boolean canEatGoat(int tigerLoc, Board bd, int[] scapeGoat)
{ return false;
}
它的功能是如果 tigerLoc(位置)的老虎可以吃任何山羊,则返回true,
如果老虎不能吃山羊,则返回false。
只能使用 legalEats[][] 而不能使用其他数组。
可以吃的山羊的位置填入 scapeGoat[0]
老虎吃完山羊后落的目的地填入 scapeGoat[1]。
有一个数组 legalEats[][]
private final int[][] legalEats = {{1,2, 9,21, 3,6}, {4,7}, {1,0, 5,8, 14,23},
{4,5, 10,18},{}, {4,3, 13,20}, {4,1},
{10,11},{}, {10,9}, ,{}, {13,12}, {11,6, 16,17, 18,21}, {19,22},
{12,8, 16,15, 20,23}, {10,3, 19,20},{}, {9,0, 18,15, 22,23}};
legalEats[0] 意味着 [0] 处的老虎可以在 [1] 处吃一只山羊并在 [2] 处着陆
(必须在 [1] 处有一只山羊并且 [2] 必须是空的)
在 [0] 处的老虎也可以在 [9] 处吃一只山羊并跳到 [21] 或在 [3] 处吃一只山羊并跳到 [6]
** 目前小妹的想法 : 通过比较在legalEats[tigerLoc][i]和 bd.isGoat() / bd.isVacant() 内在有没有相同数字, 从而找出可不可以在这两个条件(.isGoat 和 isVacant 存在) 下返回true ,但二维数组 和 enum枚举 好像不能进行比较? **
public class GameRules
{
private boolean moveStage;
private boolean goatsTurn;
private int numGoats;
private int numTigers;
private final int MAXGOATS = 12;
private Board bd;
public boolean canEatGoat(int tigerLoc, Board bd, int[] scapeGoat)//从这里开始
{
for (int i=0;i < legalEats[i].length;i++)
{
if (legalEats[tigerLoc][i] == bd.isGoat(tigerLoc) && legalEats[tigerLoc][i+1] == bd.isVacant(tigerLoc)){
return true;}
else{
return false; }
}
return false;
}//结束
public class Board
{
private enum Piece {GOAT, TIGER, VACANT};
Piece[] board;
public boolean isGoat(int a)// isGoat方法
{
return board[a] == Piece.GOAT;
}
public boolean isVacant(int a)// isVacant方法
{
return board[a] == Piece.VACANT;
}
}
不排除不需要枚举進行比較
如果有其他更优解 欢迎指教 谢谢
枚举返回的是整形值,只要数组返回的数据类型一致就可以比较。
自己写个算法比较就是了。主要看你想怎么比了,legalEats[tigerLoc][i]这个是拿到一个点,bd.isGoat(int a)这个方法是判断是不是山羊,
能不能吃的判断就是 legalEats[tigerLoc][i] == bd.isGoat(i)
能不能跳跃的判断就是legalEats[tigerLoc][next] == bd.isVacant(next)
没理解错的话应该就是这样比咯。