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

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

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

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

Q&A

解決済

2回答

228閲覧

while文について質問があります

max-777

総合スコア17

Java

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

0グッド

0クリップ

投稿2020/08/19 07:38

int num=0,count;
while(num<3){
num++
//ここにコードを挿入
System.out.println("num="+num+":count="+count);
}
}

6行目に挿入した際に次の出力を生成するコードはどれですか。
num=1:count=1
mum=1:count=2
num=2:count=1
num=2:count=2
num=3:count=1
num=3:count=2

上記の問題において、正解はできたのですが、num=3になる構造が理解できません。気付いたこと言えば、num++の位置なのですが、それがどのように関係しているのか教えてください。

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

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

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

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

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

m.ts10806

2020/08/19 07:39

コードやエラーはマークダウンのcode機能を利用してご提示ください。 https://teratail.com/questions/238564 あとタイトルに内容がほぼありません。whileのどういう点が聞きたいのか、具体的に要件を記載してください。
momon-ga

2020/08/19 07:41

なぜ、num=3にならないと考えていますか?
max-777

2020/08/19 07:41

なぜ、num=3になるのか質問しています
max-777

2020/08/19 07:43

単純に考えてwhile(num<3)だからですね
momon-ga

2020/08/19 07:43

???だって、そう書いてあるからとしか・・・ なので、num=3にならないと思う理由を尋ねたのだけど・・・
momon-ga

2020/08/19 07:46

最初の表示が num=1 が、num=0で表示されない理由と同じです。で伝わります?
max-777

2020/08/19 07:46

while(num<3)だから、num=0,1,2だと思います。
max-777

2020/08/19 07:49

最初の表示が num=1 が、num=0で表示されない理由と同じです。で伝わります? これがなぜだか分かりません。例題にもなく、いきなり出てきたもので…
m.ts10806

2020/08/19 07:59

質問は編集できますので。
guest

回答2

0

ベストアンサー

while(num<3)だから、num=0,1,2だと思います。

ご認識の通りです。
そして、表示する直前に1を足してるので、

0,1,2が、それぞれ、1,2,3と表示されます。

投稿2020/08/19 07:49

momon-ga

総合スコア4820

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

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

0

whileは、常にその条件を見張っているわけではありません。
あくまでも、処理が一周して次の周に入るかどうかのタイミングで、判定しているに過ぎません。
ループの途中で条件を外れるようなことがあっても、
whileは一切それを感知しません。

num3になった瞬間にループが終わる訳ではありません。
次の周に入るまではそのまま継続されます。

whileは条件がfalseになった瞬間に、繰り返しは終了するという認識でよいですか

参考書にはそのように書いてありましたが、どちらが正しいのでしょうか?

whileにそのような機能はありません。
おそらく、参考書の、

while文は、条件が成立する間、繰り返します。

という文の誤読かと思われます。
「条件が成立するする間繰り返す」→「条件が成立しなくなった瞬間に繰り返しは終わる」
という読み方は出来なくはありません。
(実際、そういう誤解をしている人を時々見かけます)

しかし、whileの機能は、

①、条件部の値を見る
②、真であれば、次の文(ブロック)を実行する
③、①に戻る

というシンプルなものです。
あくまで、次の文(ブロック)を実行するかどうかを、
条件部の値によって分岐させているに過ぎません。

これは、if文等でも同じです。

if(n==3){ // nが3の時に以下を実行 println(n); n=5; // nが3じゃ無くなる println(n); // nが3じゃ無いから実行されない? }

そんな事はないですよね?
ifもwhileも、条件が有効なのは判定されるその瞬間だけです。

投稿2020/08/19 07:52

編集2020/08/19 09:14
amiya

総合スコア1218

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

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

max-777

2020/08/19 07:59

whileは条件がfalseになった瞬間に、繰り返しは終了するという認識でよいですか
amiya

2020/08/19 08:22

そうではありません。という内容の文です。
max-777

2020/08/19 08:24 編集

参考書にはそのように書いてありましたが、どちらが正しいのでしょうか?
momon-ga

2020/08/19 08:52 編集

瞬間と書いてありました?<参考書 以下のコードは実際に、numが1000の場合でも表示します。 while (num < 3) { num++; int prev = num; num = 1000; // 瞬間に繰り返しが終了するなら以下の表示は通らない? System.out.println("num=" + num); num = prev; }
max-777

2020/08/19 08:58

「trueの間というのを」すなわち、falseになった瞬間と解釈しておりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問