比较二维数组为0(c ++)

时间:2016-01-16 06:28:11

标签: c++ arrays

我用do.while做了一个循环,试图改变游戏的变化。现在,当两个阵列中的任何一个都变为0时,我想要阻止它,并显示胜利者。这是一场战舰游戏。

do{ for(int k;toc=1;k++){
    objec1();

     if(toc!=1)
      break;

       }

     for(int k;toc2=1;k++){
        objec2();   
        if(toc2!=1){

            break;
           }

           }

        if(jug1[i][j]==0){ //Here is where the loop must stop
    correct1=true;
 cout<<"\n\tEl The player 2 is the winner\n";
 }
if(jug2[i][j]==0){
    correct1=true;
 cout<<"\n\tPlayer 1 is the winner \n";
 }
 } while(!correct1); 

在我拥有代码的方式中,它不会在必须时停止循环。现在,我想检查一个数组是否满0,停止循环,更改标志并显示获胜者。原始代码更加宽容。考虑一切都已正确初始化。

2 个答案:

答案 0 :(得分:1)

首先,如果您修复格式,将功能分解为函数并使用更好的变量名称,我认为您可以更轻松地解决问题。目前很难阅读和理解。

其次,您所谈论的操作非常昂贵。如果你能避免以这种方式进行检查,那就更好了。例如,保持非零条目的计数,而是将其用作检查条件。或者,如果您有关于哪些战列舰正在发挥作用的信息,请检查何时没有留下任何战列舰。

无论如何,这里有一个函数来找出“当[二维]数组满0时”。你可以从另一个函数调用它。

/**
 * array is a 2-d array used by Battleship game
 * i is the outer array size
 * j is the inner array size
 */
bool isAllZeros(int **array, int i, int j) {
    for (int m = 0; m < i; m++) {
        for (int n = 0; n < j; n++) {
            if (0 != array[i][j]) {
                return false;
            }
        }   
    }   

    return true;
}

答案 1 :(得分:1)

你没有在你的forloops中初始化k并且你没有给他们可以实现的停止条件:

for(int k;toc=1;k++)

第二个相同:

for(int k;toc2=1;k++)