はじめに
Javaの学習中にwhile文を使って繰り返し処理を行おうとしたのですが、上手く結果が出力されませんでした。
調べた際に、単純にwhileの条件式に対する認識が間違っていたので記録しておきます。
条件式
whileを使う条件式は以下の通りです。
while (trueになる条件を入れる){
// 実行される処理…()の部分がfalseになったら終了
:
}
while(true) {
// 実行される処理…無限ループでbreak;を設定して終了させる
:
if(条件式) {
break;
}
}
間違えていた内容
以下が間違えていた記述です。
package ex;
public class ex_13 {
public static void main(String[] args) {
// 3でも7でも割り切れる数字を10個出力
int count = 0;
int num = 1;
int sum = 0;
- while(count == 10) {
+ while(count < 10) {
if(num % 7 == 0 && num % 3 == 0) {
System.out.print(num + " ");
sum += num;
count ++;
}
num ++;
}
System.out.println("\n10個の数字の合計値:" + sum);
}
}
while ()内に入れた条件式が「trueになるまで実行される」と勘違いしていました。
実際は、条件式が「trueになっている間に実行される」ということでした。
試しにwhile文の中に
「System.out.println(count);」
などを入れて実行してみるとcountが表示されなかったので、while文の中身が反映されていないということは分かったのですが、どうしても原因が分からずにwhileの使い方を改めて調べてみることにしました。
while (条件式){
// 繰り返しの中で実行される処理
...
}
繰り返し処理は条件式を評価して true だった場合には { から } のブロック内に記述された処理を上から順番に実行し、 false だった場合には繰り返し処理を終了し while 文の次へ処理を映します。
while文の使い方を調べたら、原因はすぐに分かりました。
初期設定を「int count = 0;」にしたにもかかわらず「while(count == 10)」を当てはめたので最初からfalseになってwhile文を通らなかったのでした…。
ちなみに、無限ループを実行したいときはwhile(true) にすることで常にtrueの状態にすることが出来ます。
その際は、最後にif文で終了させる際の条件式を追加するとwhileを抜けることが出来ます。
package ex;
public class ex_13a {
public static void main(String[] args) {
// 3でも7でも割り切れる数字を10個出力
int count = 0;
int num = 1;
int sum = 0;
+ while(true) {
- while(count < 10) {
if(num % 7 == 0 && num % 3 == 0) {
System.out.print(num + " ");
sum += num;
count ++;
}
num ++;
+ if(count == 10) {
+ break;
+ }
}
System.out.println("\n10個の数字の合計値:" + sum);
}
}
私は、この「条件式を設定する場合」と「trueで無限ループを行う場合」がごちゃ混ぜになって勘違いしてしまっていました。
おわりに
最近はなるべく調べずに、どこが間違っているか自分の頭で考えるということを意識しています。
そうなると、今回のようにそもそもの使い方が間違っていたということにも遭遇するのですが、すぐに検索していたころよりも知識として身につきやすくなった気がします。
最終的には検索しましたが、今回はwhile文の使い方が怪しいと踏んでいたためピンポイントで調べて答えにたどり着くことが出来ました。
これも、AIなどを使わずに、しっかりと仮説を立ててから実行する訓練だと思って取り組んでいこうと思います。