Java 2d阵列游戏,移动到相邻空间拾取硬币
所以我今天大部分时间都在研究这个问题。有人能帮我找出哪里出错了吗 它贪婪是因为它移动到硬币数量最多的地方;它是懒惰的,因为如果没有相邻的位置增加它的硬币宝藏,它将停止移动。如果几个相邻的地点拥有相同数量的最高硬币,采集者将选择顺时针移动到最高的位置。采集者从它访问的任何位置清空硬币Java 2d阵列游戏,移动到相邻空间拾取硬币,java,arrays,algorithm,loops,if-statement,Java,Arrays,Algorithm,Loops,If Statement,所以我今天大部分时间都在研究这个问题。有人能帮我找出哪里出错了吗 它贪婪是因为它移动到硬币数量最多的地方;它是懒惰的,因为如果没有相邻的位置增加它的硬币宝藏,它将停止移动。如果几个相邻的地点拥有相同数量的最高硬币,采集者将选择顺时针移动到最高的位置。采集者从它访问的任何位置清空硬币 public static int receiveCoins(int[][]map,int r,int c){ int[] coins = {0,0,0,0}; boolean
public static int receiveCoins(int[][]map,int r,int c){
int[] coins = {0,0,0,0};
boolean moreCoins = true;
int numOfCoins = 0;
if(map[r][c] > 0){
numOfCoins += map[r][c];
map[r][c] = 0;
}
while(moreCoins == true){
if(c < (map.length-1)){
if(map[r][c+1] > 0){
coins[1] = map[r][c+1];
}
}
if(r < map[0].length-1){
if(map[r+1][c] > 0){
coins[2] = map[r+1][c];
}
}
if(row > 0){
if(map[r-1][c] > 0){
coins[0] = map[r-1][c];
}
}
if(c > 0){
if(map[r][c-1] > 0){
coins[3] = map[r][c-1];
}
}
int maxCoin = 0;
int nRow = 0;
int nCol = 0;
for(int i = 0; i < coins.length; i++){
if(coins[i] > maxCoin){
maxCoin = coins[i];
if(i == 0){
nCol = c;
nRow = r - 1;
}else if(i == 1){
nRow = r;
nCol = c + 1;
}else if(i == 2){
nCol = c;
nRow = r + 1;
}else{
nRow = r;
nCol = c - 1;
}
}
coins[i] = 0;
}
}
}
if (maxCoin == 0){
moreCoins = false;
}else{
r = nRow;
c = nCol;
numOfCoins += map[r][c];
map[r][c] = 0;
}
}
return numOfCoins;
}
public static int receiveCoins(int[]map,int r,int c){
int[]硬币={0,0,0};
布尔值=真;
int numOfCoins=0;
如果(映射[r][c]>0){
numOfCoins+=map[r][c];
map[r][c]=0;
}
而(moreCoins==true){
如果(c<(地图长度-1)){
如果(映射[r][c+1]>0){
硬币[1]=地图[r][c+1];
}
}
if(r
我认为col必须小于(map.length-1)而不是(map.length-2)
对于{1}、{1},map.length==2,所以map.length-2=0,则col必须小于0才能执行if块。
顺便说一句,您对col和row都有map.length比较,所以您的map在任何情况下都是正方形?我认为col必须小于(map.length-1)而不是(map.length-2) 对于{1}、{1},map.length==2,所以map.length-2=0,则col必须小于0才能执行if块。
顺便说一句,您对col和row都有map.length比较,因此您的映射在任何情况下都是正方形?对您的算法进行一些更正:
在接近尾声时中断
?这将导致程序在while
循环中的第一次迭代后总是中断
map[row][col] = 0;
if(map[row][col] == 0){
break; // why?
}
if(coins[i] > highestCoin){
highestCoin = coins[i];
if(i == 0){
newCol = col; // this is important! do this for all cases!
newRow = row - 1;
}
...
}
映射进行比较。长度
,而列
应与映射[0]进行比较。长度
。这是因为行可以被视为垂直堆栈(因此代表二维数组中的第一个索引),而列可以被视为构成堆栈的水平单元(因此出现在第二个索引中)。考虑先选择堆栈,然后选择堆栈中的单元对算法的一些更正:
在接近尾声时中断
?这将导致程序在while
循环中的第一次迭代后总是中断
map[row][col] = 0;
if(map[row][col] == 0){
break; // why?
}
if(coins[i] > highestCoin){
highestCoin = coins[i];
if(i == 0){
newCol = col; // this is important! do this for all cases!
newRow = row - 1;
}
...
}
映射进行比较。长度
,而列
应与映射[0]进行比较。长度
。这是因为行可以被视为垂直堆栈(因此代表二维数组中的第一个索引),而列可以被视为构成堆栈的水平单元(因此出现在第二个索引中)。考虑先选择堆栈,然后选择堆栈中的单元我原来有它-1,但我忘了在发布代码之前把它改回去。在那一点上,我是绝望的,只是改变事情,看看会发生什么。Map是一个2d数组,所以它看起来要么像一个矩形,要么像一个正方形板。我认为{1},{1}不是一个正方形板,rowlength==1,colLength==2?不,它是一个矩形。该委员会的指数将为[0][0]高于[1][0]。另外,设置更多的硬币为假确实把我从无休止的循环中敲了出来,但是