2017-10-11 73 views
2

我有一个2D数组填充连续整数1-52以及四个0。我也创建了一个计数变量并将其设置为0;我想搜索整个数组,并且对于紧跟在13,26,39或52之后的每个0,增量为count++Java-在数组中搜索尾随0

int count =0; 
for(int i=0;i<4;i++) { 
    for(int j=0; j<4;j++) { 
     if((board[i][j]== 13 && board[i][j+1]==0) || (board[i][j]== 26 && board[i][j+1]==0) || (board[i][j]== 39 && board[i][j+1]==0) || (board[i][j]== 52 && board[i][j+1]==0)) { 
      count++; 
     } 
    } 
} 
while(count <4) { 
    move(board); 
} 

我的当前代码正常运行,并且会按照这些数字递增计数为单个零。但是,如果我的四个数字之一紧跟两个0(三个0的为increment +=3,四个0的为+=4),我想增加count+=2

+0

如果''A [1] [n]的== 0''和''A [1 + 1] [0] == 13''例如,这是否计数? –

+0

你确定,你想用数组来做这个吗?那么在那种情况下定义一个方法会如何返回这些选定数字的前0个连续0的计数呢? – nullpointer

回答

1

只是要另一种方法来计算零:

int count =0; 
     for(int i=0;i<4;i++) { 
      for(int j=0; j<4;j++) { 
       if((board[i][j]== 13 || board[i][j]== 26 || board[i][j]== 39 || board[i][j]== 52) && board[i][j+1]==0) { 
        count += numberOfZeros(i, j); 
       } 
      } 
     } 
     while(count <4) { 
      move(board); 
     } 
    } 

    public int numberOfZeros(int i, int j){ 

     int aux = 0; 
     for(; j<4;j++) { 
      if(board[i][j] == 0){ 
       aux++; 
      } 
     } 
     return aux; 
    } 

PS:我编辑你的if语句,以使其更清晰

+1

你可能想为非连续的0设置一个'else {break;}'。 – nullpointer

+0

另外第二个循环应该是''for(int j = 0; j <4 - 1; j ++)''。或者你可能会得到一个''ArrayIndexOutOfBoundsException'' –

+0

@SchiduLuca如果情况是这样的话,即使在问题中共享的代码也不会有标记的*代码正常运行*。虽然我同意这个问题在输入方面不明确。 – nullpointer

0

您可以使用一个布尔值来检查您是否是一个计数“连胜“零的:

int count = 0; 
boolean onACountStreak = false; 
for (int i = 0; i < 4; i++) { 
    for (int j = 0; j < 4; j++) { 

     if (board[i][j] == 0) { 
      // Count only if this zero is found in a streak 
      if (onACountStreak) { 
       count++; 
      } 
     } 
     else if (board[i][j] % 13 == 0) { 
      onACountStreak = true; 
     } 
     else { 
      onACountStreak = false; 
     } 
    } 
} 

while (count < 4) { 
    move(board); 
}