2016-08-13 11 views
0

2次元配列のブール値の特定のセルの周囲の値を調べる際に問題があります。私が調べている特定の値が2D配列の端またはコーナーにないと仮定しようとしました。私は、ループを8回反復するように設定しました。なぜなら、チェックしている値が2次元配列の端にない場合、8つの近傍が存在するからです。特定の細胞の周囲にある細胞の数を取得する機能は次のとおりです。2D配列の特定の値をチェックする方法

trueに設定された(3,5)を中心に、すべての値に対してcounter変数を増やしたいとします。

このコードを実行すると、カウンタが16を返しています。しかし、指定されたセルを囲む16個の真の値がありません。ループ内のロジックが間違っていますか?

int getNeighborCount(boolMatrix generation, int row, int col){ 


int counter = 0; 
row = 3; //the cell we are checking around is at row 3, column 5 
col = 5; 

//8 neighbors 
if (col > 0 && row > 0){ 
    for (int i = 0; i < 8; i++){ 
     if(generation.get(row - 1, col - 1)){ 
      counter++; 
     } if(generation.get(row - 1, col)){ 
      counter++; 
     } if(generation.get(row - 1, col + 1)){ 
      counter++; 
     } if(generation.get(row, col - 1)){ 
      counter++; 
     } if(generation.get(row, col + 1)){ 
      counter++; 
     } if(generation.get(row + 1, col - 1)){ 
      counter++; 
     } if(generation.get(row + 1, col)){ 
      counter++; 
     } if(generation.get(row + 1, col + 1)){ 
      counter++; 
     } 
    } 

    cout << "counter is " << counter; 
} 
return counter; 
} 

答えて

4

ループはここにはありません。forループはありません。実際には間違っています。なぜなら、8つの正しいifステートメントは、ポイントの周りのすべての値をチェックするからです。実際にはループのための場所はありません:)あなたは8 * 8 = 64点をチェックしますが、これは間違っています。

if (row > 0 && col > 0 && generation.get(row - 1, col - 1)) //... 
if (row > 0 && generation.get(row - 1, col)) //... 
//Continue... 
+0

おそらくべき:ポイントは0 0(またはエッジ近く)にあるとき

また、あなたのif文は、あなたが簡単にifステートメント内の条件を入れていることを修正することができます実行されません。配列の右端または下端にいるかどうかも確認してください。 – Xenotoad

+0

@Xenotodはい、本当です。それは練習として残されています:) – Rakete1111

+0

恐ろしい!私は実際にこれとビオラを投稿した直後にforループを削除しました!出来た。私は助けに感謝します!私は現在エッジをチェックしています(: –

関連する問題