- ベストアンサー
プログラム停止について。
こんばんは。 今作成しているプログラムに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); } } ですが、これがうまくいかず行き詰っています。 何かいい方法があったらぜひ教えてください。また、間違い等、指摘していただけると助かります。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ざっと見たところプログラムに誤りがあるようには見受けられません。「うまくいかず行き詰っています」とはどのような状況でしょうか? 実際にどのような不具合が出ているのか補足していただけませんか。 なお、大したことのない蛇足的アドバイスとしては、 ○特にint型にする必要がないなら、flag変数はboolean型にするのがベター。 ○一般的に、forループの中でしか使わない変数(flag、i、j)は、forループの中で宣言したほうが良い。 ところで、質問文にあるプログラムでは、最も外にあるforループの中身が複数回実行されたときに、いずれも配列outの内容が出力されるようになっていますが、それでいいんですよね?
その他の回答 (2)
- chi-kon
- ベストアンサー率43% (58/132)
よく読むとなにがやりたいのかわかりません。 ある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; }
お礼
二回も回答していただきありがとうございます。メソッドを作るという方法はまったく考えていなかったので、参考になりました。ありがとうございます。
- chi-kon
- ベストアンサー率43% (58/132)
この配列ってなんの配列ですか? int[][]なのかな? String[][]だっらequalsできくんじゃないかなぁ? あとループを抜けるためだけに変数を使っていますが、 breakでforループを抜けれます。 あんまりロジックの途中でSystem.exitっていうのは どうんかなぁって思います。 ちゃんとメソッドを抜けるようにしたほうが見やすいとおもいます。
お礼
お礼が遅くなってすみません。うまく動くようになりました!変数flagをbooleanにして、out_subも同じようにbooleanにしたらうまくいきました。初歩的なミスだったようです。ありがとうございました!
補足
早速の回答ありがとうございます。 状況としては、「同じ出力がされているのにもかかわらず、出力が止まらない」状態です。 >>最も外にあるforループの中身が複数回実行されたときに、いずれも配列outの内容が出力されるようになっていますが、それでいいんですよね? はい、間違いありません。出力はout[i][j]のみです。 よろしくお願いします。