Java 什么';It’我的逻辑有问题,我可以';t确定网格左侧或底部的一行中是否有3个?

Java 什么';It’我的逻辑有问题,我可以';t确定网格左侧或底部的一行中是否有3个?,java,android,logic,Java,Android,Logic,因此,我试图检查是否有3个相同颜色的瓷砖在一行垂直和水平。这适用于从左到右水平的瓷砖。它也适用于从顶部对齐而不是从底部对齐的瓷砖 基本上,我有一个4×4的网格,每个瓷砖都可以改成红色、白色或灰色。我的逻辑有点问题,我就是挑不出来 这是我用来判断一行中是否有3个的代码gridArray[i].getRDC()==R.drawable.white-这将只检查返回的RDC是否为白色。目前,我只是想让逻辑正确,还没有添加代码来检查RDC是否为红色 public void checkWinner(){

因此,我试图检查是否有3个相同颜色的瓷砖在一行垂直和水平。这适用于从左到右水平的瓷砖。它也适用于从顶部对齐而不是从底部对齐的瓷砖

基本上,我有一个4×4的网格,每个瓷砖都可以改成红色、白色或灰色。我的逻辑有点问题,我就是挑不出来

这是我用来判断一行中是否有3个的代码
gridArray[i].getRDC()==R.drawable.white
-这将只检查返回的RDC是否为白色。目前,我只是想让逻辑正确,还没有添加代码来检查RDC是否为红色

public void checkWinner(){
    //CHECK FOR HORIZONTAL
    for(int i=0;i<16;i+=4){
        if(gridArray[i].getRDC() == R.drawable.white 
                && gridArray[i+1].getRDC() == R.drawable.white
                && gridArray[i+2].getRDC() == R.drawable.white
        ){
            Toast.makeText(getApplicationContext(),"THREE IN A ROW HORIZONTALLY",
                    Toast.LENGTH_SHORT).show();
            Log.d("MyApp","3 in row horizontally");
        }
        
    }
    

    //CHECK FOR VERTICAL
    for(int i=0;i<=3;i++){
            if(gridArray[i].getRDC() == R.drawable.white 
            && gridArray[i+4].getRDC() == R.drawable.white
            && gridArray[i+8].getRDC() == R.drawable.white
//          && gridArray[i+12].getRDC() == R.drawable.white
//          || 
//          gridArray[i+12].getRDC() == R.drawable.white 
//          && gridArray[i+8].getRDC() == R.drawable.white
//          && gridArray[i].getRDC() == R.drawable.white
            ){
                Toast.makeText(getApplicationContext(),"THREE IN A ROW VERTICALLY",
                Toast.LENGTH_SHORT).show();
                Log.d("MyApp","3 in row vertically");
            }
        }
    }
public void checkWinner(){
//检查水平方向

对于(int i=0;i
for(int i=0;i您试图确定是否有三个相同颜色的块的方法是根本错误的。首先,您应该使用二维数组,而不是现在使用的一维数组,因为它很容易扩展

for(int i=0;i<ROWS;i++){

    for(int j=0;j<COLUMNS;j++){

         int color=gridArray[i][j++];
         int count=1;

          while(color==gridArray[i][j++]){
             count++;
             if(count>=MAX_SAME_COLOR){
                Toast.makeText(getApplicationContext(),MAX_SAME_COLOR+" IN A ROW HORIZONTALLY",
                        Toast.LENGTH_SHORT).show();
                Log.d("MyApp",MAX_SAME_COLOR+" in row horizontally");
               }
           }

    }
}

用于(int i=0;i用于垂直检查

for(int i=0;i<=3;i++){

for(int i=0;i
for(int i=0;iIs)有一些约束要求你使用1D数组?我的意思是,如果它有效,为什么说是2d或3d数组?@ChiefTwoPencils-但我知道你来自哪里。如果你在这里发帖,它有效吗;)?不,这不是哈哈!但是下面的一些答案已经解决了我的问题:)@Pionetlh二维阵列的原因是它更能代表结构。你正在强制采用硬编码的数字设计,这是一维阵列的结果。太棒了,这解决了垂直对齐问题:)啊。我真的应该把它改成2D数组来防止任何其他错误?但我的意思是,我现在已经把它做得太好了!但是你是对的,我将来可能需要把它改成5by5网格。但是,如果我真的想要一个5by5,我所需要做的就是创建另一个方法
check5winner()
然后简单地复制我的另一个方法,并按相应的数量递增数字。仅仅为5by5创建另一个方法是一个糟糕的设计选择,因为我们会有重复的代码。如果我们需要更改其他内容(例如要检查的颜色),我们现在需要修复两个位置(我们经常忘记所有需要修复的地方,因此每次更改都会引入新的bug)。它会检查它们是否在一行中。仔细查看。一旦遇到不同的颜色,它将退出,而循环和计数将重置为“1”。在评论之前仔细查看。
for(int i=0;i<=3;i++){
for(int i=0;i<=7;i++){
for(int i=0;i<16;i+=4){
        if((gridArray[i].getRDC() == R.drawable.white 
                && gridArray[i+1].getRDC() == R.drawable.white
                && gridArray[i+2].getRDC() == R.drawable.white
        )
       ||
        (gridArray[i+1].getRDC() == R.drawable.white 
                && gridArray[i+2].getRDC() == R.drawable.white
                && gridArray[i+3].getRDC() == R.drawable.white
        )){
            Toast.makeText(getApplicationContext(),"THREE IN A ROW HORIZONTALLY",
                    Toast.LENGTH_SHORT).show();
            Log.d("MyApp","3 in row horizontally");
        }

    }