質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

3回答

689閲覧

50から100を表示させる

0re0

総合スコア7

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2022/05/07 15:43

編集2022/05/08 22:51

Java

int i = 1; System.out.println("50から100までを表示"); while (50 + i <= 100); i++;{ System.out.println(50 + i); }

50から100までの数字をwhile文を使って表示させたいのですが、
上記の自分の書いたものだとうまくできませんでした。
どこに問題があるのか教えていただけると助かります。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

take_take9

2022/05/07 16:51

50は出力されたのですか?
0re0

2022/05/07 23:24

すみません、されていなかったです。 間違えて式を 50 + i >= 100 にした時に51が表示されました。
Stgl--1127

2022/05/08 03:43

それは変数iに代入された数が1だからです。0に書き換えてみてはどうでしょう
dodox86

2022/05/08 05:28

ただ何となくコードを書いて実行して思ったとおり動かないと悩み、質問するのではなく、1行1行の意味を理解し、実行結果を想定してコードを書きましょう。
guest

回答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
Stgl--1127

総合スコア27

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0re0

2022/05/08 13:51

端的に教えていただけてわかりやすかったです。ありがとうございます! whileを使って表示しろという課題だったので、whileで質問していました。 説明不足ですみません。丁寧にforの方も提示していただいてありがとうございます! ご指摘いただいた部分をれから質問する際は気をつけます!
guest

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
cx20

総合スコア4632

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0re0

2022/05/07 23:27

やってみたのですが、これだと(50から100までを表示)しか出てきません。
episteme

2022/05/08 08:09

while (50 + i <= 100) に ; つけてたりして
guest

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

BeatStar

総合スコア4958

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問