Java
int i = 1; System.out.println("50から100までを表示"); while (50 + i <= 100); i++;{ System.out.println(50 + i); }
50から100までの数字をwhile文を使って表示させたいのですが、
上記の自分の書いたものだとうまくできませんでした。
どこに問題があるのか教えていただけると助かります。
よろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/05/07 23:24
2022/05/08 03:43
2022/05/08 05:28
回答3件
0
ベストアンサー
while(50 + i <= 100);
のように;をつけてしまうと処理が止まらず無限ループしてしまいます。
それと、本来i++
と言う処理はWhileの処理ですので、Whileの中括弧の中に書く必要があります。
while(50 + i <= 100){ i++; System.out.println("....."); }
それか、以下のようにfor文を使って書いてみてはいかがでしょう。While文よりも見た目がシンプルになります。
java
1public class Main { 2 public static void main ( String[] args ){ 3 4 System.out.println("50から100までを表示"); 5 for(int i =0; 50 + i<=100; i++){ 6 System.out.println(50 + i); 7 8 } 9 } 10}
わからない場合に以上のコードを説明していくと、for
の中のint i = 0;
で変数iに0を代入、50 + i <= 100
で100以下の場合に処理を繰り返す、i++
でiに1ずつ足していきます。
まぁやってることはWhile分と変わりませんね。forを使って1行で書くかwhileを使って3行で書くかの違いです。
それと、質問をする際は、「うまく行かない」ではなくどのような結果が出て、どのような問題が発生しているのかを明確に記述すると回答がつきやすくなりますよ。
投稿2022/05/08 03:53
編集2022/05/08 05:57総合スコア27
0
while (50 + i <= 100);
のように while
の後ろに「;
」(セミコロン)を付けると、無限ループになるかと思います。
修正するとしたら、こんな感じでしょうか。
https://wandbox.org/permlink/yUEBfr4K7CqLvhh5
Java
1int i = 0; 2 3System.out.println("50から100までを表示"); 4 5while (50 + i <= 100) 6{ 7 System.out.println(50 + i); 8 i++; 9}
投稿2022/05/07 17:01
編集2022/05/07 17:03総合スコア4632
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/05/07 23:27
2022/05/08 05:11
2022/05/08 08:09
0
一つ目。基礎からやりましょう。プログラミングは「でたらめに書けばいい」というものではありません。
質問にあるコードを見るとあり得ないミスを連発しています。ケアレスミスの可能性も無いとは言いませんが、ケアレスミスの場合であればすぐに気づく内容です。
Javaでは文の末尾は必ず ";" で終わります。(ただし for文やwhile文等のようなものは別とする)
仮にwhile( 50 + i <= 100 );
と書いたなら、
Java
1while( 50 + i <= 100 ){ 2 ; // 何らかの処理があるはずだけど書いていない 3}
みたいな意味になります。というのも、Javaではwhile文等のような構造で処理部が一行の場合、"{}"を省略する事が出来ます。そうすると一番上のwhile( 50 + i <= 100 );
は {;}
という解釈になる。
で、条件式は「50にiを足した値が100未満の間ループ」するけど、処理は何もしない。つまり「単に数字を進ませる」的なものだけ。ただし、iの値は変えていないので無限ループ。( i の値が 50 以外ならそもそも条件を満たさないからスキップするけど)
恐らくやりたい処理としては、「50 + i <= 100 を満たす間、iをインクリメントしながら表示する」的なことだと思う。ということはやりたいことがそもそもできていない。つまり基礎が出来ていない事が原因。(基礎が出来ているのならこんなミスはしない)
二つ目。コードを読みましょう。プログラミングっていうのは「こう書けばいい」ってものではありません。
プログラミングっていうのは「人間が手作業でやっていることを機械に任せるために指示を出すこと」です。
ということは、その指示のロジックが間違っていたらどうでしょうか?
人間関係でも、上司から「これをやれ」と指示されたからそれをやると、「俺はやれと言った覚えはない。やる気が無いならこの仕事やめろ」だの罵倒されたらどうでしょうか?
「何員ってんだこの人は」と思いますよね。論理が滅茶苦茶だとどうやっても上手くいかないはずです。それと一緒です。機械は何もわからないので教えてあげる必要があります。ただしその論理が間違っているとうまくいくものも上手くいきません。そのロジックを書き下すのがプログラミングです。
ということはコードを読めば論理的かどうかがわかるのです。(もちろん出来ない場合もありますが、それは別の理由で)
コードを読むコツは一行レベルで、その行が何をしているかを考えながら読むです。
Java
1 // 変数 i を宣言して i の値は 1 とする 2 int i = 1; 3 // 「50から100までを表示」と表示する 4 System.out.println("50から100までを表示"); 5 // 「50 + i <= 100」を満たす間ループするだけ 6 while (50 + i <= 100); 7 // iをインクリメント 8 i++;{ 9 // 50 + i をした結果を表示する 10 System.out.println(50 + i); 11 }
これを疑似コードとして抽出する。
1. 変数iを用意してi = 1とする 2. 「50 + i <= 100」を満たす間ループだけでする(処理はしない) 3. iをインクリメント ( i = i + 1 ) 4. 50にiを足した数字を表示
これを実際にシミュレーションしてみてください。たとえば実際にiの値を代入して計算してみるとか。
すると、まず (1)で i = 1 なので (2) では50 + 1 <= 100
となり、51≦100 を満たしますから、";"にすら到達せずに(2)のループに戻る。そして同じく(2)で50 + 1 <= 100
なので戻って…とやると終了できないはずです。無限ループです。
仮に 50 + i >= 100
だとすると、51≧100 なので条件式を満たさないのでループせずに(3)へ。
(3)で i = 1 + 1 = 2 で i = 2になるはずです。
そして、そのまま(4)で 50 + i = 50 + 2 = 52 となります。
よって、「50から100までを表示する」ことにはなり得ません。
三つ目。手作業でやるなら…と考えてみましょう。プログラミングは上でも述べたように「手作業でやっていることを機械に任せるための指示」です。ということは「現実世界でならどうするか」を考えてみればいいのです。
たとえば、
[本来の問題文] 50から100までを以下のように表示するプログラムを組め。 50 51 52 53 54 55 56 ... 100
という問題文を、
[依頼書] 黒板に以下のように50から100までの数字を並べて書いてくれ。 50 51 52 53 54 55 56 ... 100
みたいに考えるのです。
私ならまず書きだす前に規則性を見付けます。
上記の場合は数字と数字の間には半角スペースがありますね。ですが最後の数字のところだけはちょっと例外的。
ということは、最後の数字以外は<数字> + <半角スペース>
という規則性があるはずです。
よって、「最後以外はすべて<数字> + <半角スペース>というペア」と考えることが出来ますね。
最初とは何でしょうか? 最初の数字は50のはずです。
最後とは? 最後は100のはずです。ということは「iの値が100以外なら末尾に半角スペースを追加する」的な考え方になるはずですね。
後はこれをコードにするだけです。
whileを使ってやるなら、whileの構造を理解している必要があります。
whileは「条件式が真のときに処理をして、繰り返し行う」です。つまりiの値を変化させるのは処理部とかで行う。
(やり方によっては条件式のところでもできるけど、ややこしいからスルー)
後は基礎が出来ていれば簡単にできることです。
投稿2022/05/08 11:40
総合スコア4958
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。