2 つの for ループがあり、1 つは別のループにネストされています。ボタンの 2D 配列をループして、アクション リスナーを使用してクリックされた各ボタンのソースを取得します。
ボタンが見つかったら、ボタンの位置/配列インデックスを外部メソッドに渡します。ただし、ボタンの配列からボタンが見つかった場合、最初の for ループはその終了条件を FALSE と評価しますが、i の値をインクリメントします。1エラーでオフにつながります。私のコードは、「イベント」が ActionEvent である標準アクション実行メソッドにあります。buttons[][] は、インスタンス変数として定義された JButton 配列です。サイズは 10 x 10 で、既にパネルに追加されています。
int i = 0; //this will loop through the columns in the array
int j = 0; //loop through the rows
boolean locatedSource = false; //allows me to escape both loops
for(i = 0; !(locatedSource) && i < buttons.length; i++) //problem here, when i < buttons.length is FALSE i still gets incremented, leading to an off by one error
{
for(j = 0; !(locatedSource) && j < buttons.length; j++)
{
if(event.getSource() == buttons[i][j])
{
locatedSource = true;
break;
}
}
}
//do stuff with i and j in another method. Leads to array out of bounds error / off by one error
}
私は、ラベルを使用してこの問題を解決しようとしているわけではありません。彼らは落胆しているようです。