- ベストアンサー
forループである条件に達したらその時点のiを出力する
困っています。よろしくお願いします。 初心者のためあまりうまく質問できていないかもしれません。 不明な点があれば補足要求をお願いします。 やりたいことは、 ・iを0から9へ増やす。 ・各iについてある計算をする。 ・計算値が初めて負になったiを出力する。 といった内容です。 試してみたのは、 for(i=0;i<10;i++){ I=(iの式); if(I<0){ break; } } System.out.println(i); というプログラムですが、これだとうまくいきません。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
そのソースだけなら、うまくいかないわけがありません。 ただ、どちらにせよswitch文以外でbreakを使うことはオススメできません。 ということで、このように書いてみたらどうでしょう? public class Test{ public static void main(String[] args){ int i; //マイナスになるか判定する式 int minusCheck; //マイナスになった際のiを保存する変数 int result=0; //結果的にこれがtrueになるとresultへの値の代入ができなくなる boolean lock=false; for(i=0;i<10;i++){ minusCheck=5-i; //lockがfalseでかつ判定式が負なら if(minusCheck<0&&lock==false){ result=i; //lockがtrueになるのでlock==falseを満たさなくなり //二度とこのif文の中の処理は行われない lock=true; } } System.out.println(result); } }
その他の回答 (3)
- hal_n
- ベストアンサー率43% (7/16)
他の回答者の方がおっしゃられている通り、ご提示のソースには特に問題が無いように見えます。 まずは、IF文を一度消してみて、変わりに I と i の値を10回(i = 0~9まで)出力してみては如何でしょうか。 もし、i が0の時に I がマイナスになるのであれば (iの式) の中身が間違っていることになりますし、そうでないのであればIF文等の使い方、つまりプログラムの制御構造に問題があるという事でしょう。 まずは、一歩ずつ問題の切り分けを行いましょう。 #質問とは直接関係ありませんが大文字・小文字が違うだけの変数名などはうっかりバグの元になりやすいので避けたほうがよろしいですよ。
お礼
ありがとうございました!
- zozy
- ベストアンサー率60% (20/33)
i2をどう宣言してますか? int i2;とだけ宣言していませんか? for(i=0;i<10;i++){ I=(iの式); //もし、if文の中の処理が一度も行われなかったら //i2には何が入っているのでしょう? //int i2=0;と宣言していれば、i2には0が入りますが。 if(I<0){ i2=i;break; } } System.out.println(i); System.out.println(i2);
お礼
ありがとうございました!
- precog
- ベストアンサー率22% (966/4314)
どううまく行かないか書かないと、エスパーでもない限り答えられません。 プログラムは思いどうりに動かないことが問題なんですよね? プログラムだけ示されたら、「その通りに動くんじゃないの?」としか言いようがないです。 あえて言うなら、forにbreakを使うのはお行儀が悪い (バグの元) ですけど、そんな話を聞きたいわけじゃないですよね?
補足
回答ありがとうございます。 その通りですね;; 上記プログラムを動かすと、“0”が出力されます。 でも、それは間違った値です。(答えはわかっています) ちなみに、 for(i=0;i<10;i++){ I=(iの式); if(I<0){ i2=i; ←ここと break; } } System.out.println(i); System.out.println(i2); ←ここを付け加えました。 という具合に変更すると、一番下の“i2”の部分で、 “ローカル変数i2が初期化されていない可能性があります” と言われてしまします。 これはどういうことなんでしょうか。 何度も恐縮ですが、回答していただければ幸いです。
補足
回答ありがとうございます。 丁寧に模範も示していただき、感激しました。 しかし、いろいろ検討した結果今から構造を変えるのは大変なので、 できれば上記プログラムを改造して目的のプログラムを作れればいいなと思っています。 上記プログラムを動かすと、“0”が出力されます。 でも、それは間違った値です。(答えはわかっています) ちなみに、 for(i=0;i<10;i++){ I=(iの式); if(I<0){ i2=i; ←ここと break; } } System.out.println(i); System.out.println(i2); ←ここを付け加えました。 という具合に変更すると、一番下の“i2”の部分で、 “ローカル変数i2が初期化されていない可能性があります” と言われてしまします。 これはどういうことなんでしょうか。 何度も恐縮ですが、回答していただければ幸いです。