こんばんは。

今作成しているプログラムにout[i][j]という出力用の多次元配列があります。この出力が全て同じになった時、プログラムを停止するようにしたいと思っています。
そこで、以下のような方法を考えました。

for( ; ; ) { //無限ループ
flag = 0;
for( i = 0; i < 10; i++ ) {
for( j = 0; j < 4; j++ ) {
System.out.print( out[i][j] );
if( out_sub[i][j] != out[i][j] ) {
flag = 1;
out_sub[i][j] = out[i][j];
}
}
System.out.println();
}
if ( flag == 0 ) {
System.exit(0);
}
}

ですが、これがうまくいかず行き詰っています。
何かいい方法があったらぜひ教えてください。また、間違い等、指摘していただけると助かります。

よろしくお願いします。

A 回答 (3件)

ざっと見たところプログラムに誤りがあるようには見受けられません。

「うまくいかず行き詰っています」とはどのような状況でしょうか? 実際にどのような不具合が出ているのか補足していただけませんか。

なお、大したことのない蛇足的アドバイスとしては、
○特にint型にする必要がないなら、flag変数はboolean型にするのがベター。
○一般的に、forループの中でしか使わない変数(flag、i、j)は、forループの中で宣言したほうが良い。

ところで、質問文にあるプログラムでは、最も外にあるforループの中身が複数回実行されたときに、いずれも配列outの内容が出力されるようになっていますが、それでいいんですよね?

この回答への補足

早速の回答ありがとうございます。
状況としては、「同じ出力がされているのにもかかわらず、出力が止まらない」状態です。

>>最も外にあるforループの中身が複数回実行されたときに、いずれも配列outの内容が出力されるようになっていますが、それでいいんですよね?

はい、間違いありません。出力はout[i][j]のみです。

よろしくお願いします。

補足日時:2003/10/30 21:39
    • good
    • 0
この回答へのお礼

お礼が遅くなってすみません。うまく動くようになりました!変数flagをbooleanにして、out_subも同じようにbooleanにしたらうまくいきました。初歩的なミスだったようです。ありがとうございました!

お礼日時:2003/11/09 23:47

よく読むとなにがやりたいのかわかりません。


ある2次元配列があってその要素がすべて同じかどうかをしりたいということでしょうか?

だとするならば下のような感じでメソッドをつくり、
戻り値がtrueだったらプログラムを終了させるという感じですか?

outとout_subはどこからやってくるのでしょうか。。。

public static boolean isSameValue(int[][] array) {
int x = array.length;
int y = array[0].length;
int tmp = array[0][0];
for (int i = 0; i < x; i++) {
for (int j = 0; j < y; j++) {
if (array[i][j] != tmp) {
return false;
}
}
}
return true;
}
    • good
    • 0
この回答へのお礼

二回も回答していただきありがとうございます。メソッドを作るという方法はまったく考えていなかったので、参考になりました。ありがとうございます。

お礼日時:2003/11/09 23:54

この配列ってなんの配列ですか?


int[][]なのかな?
String[][]だっらequalsできくんじゃないかなぁ?

あとループを抜けるためだけに変数を使っていますが、
breakでforループを抜けれます。
あんまりロジックの途中でSystem.exitっていうのは
どうんかなぁって思います。
ちゃんとメソッドを抜けるようにしたほうが見やすいとおもいます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング