【Javaプログラミング超入門 #15】繰り返し(3):制御構造のネスト(入れ子)・do-while文

 

みのる
こんにちは。笑顔で感謝!✨ みのるコーチです。
今回も、ご覧いただき、ありがとうございます。

今回は

Java超入門 #15
繰り返し(3):制御構造のネスト(入れ子)・do-while文

というテーマでお送りします。

繰り返しの構文で while文と for文を学びました。
書けるプログラムは多くなってきたと思います。

今回は、制御構文のネストの話をしたあと
do-while文を学んでいきましょう。

彩香
更にプログラムで書ける幅を広げていきます。
今回も、よろしくお願いします。
剛留
また、新しい構文ですね…。今回も、頑張りますっ!
みのる
それでは 早速 いってみましょう。

【Youtube版】

Youtubeでもお伝えしていますので
是非チェックしてくださいね。

【1】制御構造のネスト

① ネストとは

ネストとは
✅ 「条件分岐」や「繰り返し」の
  制御構造の中に別の制御構造を
  含む多重構造。

✅ 入れ子ともいう。

「条件分岐の中に条件分岐」や
「繰り返しの中に条件分岐」など…

色々なパターンがあります。
次のコーナーで、例を見ていきましょう。

② if文の中にif文の例

if – else 文の中に if – else 文が
存在するパターンです。

この例では、まず、英語の点数が
80点以上の条件で分岐しています。

そして 更に、分岐したそれぞれの中で
数学の点が80点以上の条件で分岐して…

“A評価”~”D評価”までを 決定しています。

1つの if で表現できない条件などの場合に
使われる事が多いものです。

③ for文の中にfor文の例

九九の表を表示するプログラムです。

フローチャートの黄色い部分は、1 の段から 9 の段までの
9 行の処理を行うループです。

最初は水色の中を1つの処理とみなして
1 行目から 9 行目までの各行の処理をして改行すると考えます。

ここでは、初期化式が i = 1、条件式が i <= 9、
条件変化式は i++ です。

i が 1 から 9 まで実行される事が分かりますね。

そして、水色の中の処理が、1 行分の処理です。
各行の i に掛け算する j を 1 から 9 までループしています。

ここでは、初期化式が j = 1、条件式が j <= 9、
条件変化式は j++ です。

水色の枠の中で j が 1 から 9まで
実行されることが分かります。

処理は、 i * j を表示しています。

java のプログラムの例では、System.out.print で掛け算結果と
区切りの” “(スペース)を 文字列連結して表示しています。

そして 1 行分の処理の最後に、改行処理を行っています。

外側のループは
i をカウンタとした基本パターンで…

内側のループが
j をカウンタとした基本パターンです。

このように、ループの中でループを行う事を

『多重ループ』

といいます。

④ for文の中にif文の例

この処理は まず、水色の部分を1つの処理と考えます。

すると、外側は繰り返しの基本パターンです。
i が 0 から 9 まで繰り返すパターンですね。

for ループで記述してあります。

初期化式は i = 0、条件式は i < 10、
条件変化式は i++ です。

そして、この水色の枠の中で、条件分岐を行っています。

i % 3 が 0 だったら、これは 3 で割った余りが 0 だったら
ということで、3 の倍数だったらという意味になります。

条件式が true の場合、iの値(3の倍数)と表示して
そうでなかったら iの値だけを表示します。

プログラミングしていると、このように ループをしている中で
条件により処理を分岐することは 多く出てきます。

頻出パターンとして、押さえておきましょうね。

彩香
最初の頃に、プログラムって、マトリョーシカみたいって
言いましたが、このネストは、その代表選手みたいですね。

ところで、質問です。
この、ネストは、何重にでも深くできるんですか?

みのる
このマトリョーシカみたいな、ネストの構造は
何重にでも深くできますかっていう質問ですね。

これは、その通り、何重にでも深くできます。

ただし、プログラムの見やすさという観点からは
あまり深いネスト構造はお勧めできません。

このあたりも、ポイントの1つですね。

剛留
このあたりのプログラムになると
勉強してきた事が 組み合わさって出てきますね。

頑張って 復習しながらやっていきます。

彩香
確かに、ネストが使えると便利に思います。

特に、ループの中で条件分岐する事は 多いと思いますので
演習問題に 取り組んでいきます。

【2】do-while文

① do-while文とは

do-while 文とは
✅ 繰り返しを行う構文で
  条件式が true の間
  do-while ブロックを継続する。

✅ 条件式の判断は
  継続する処理の後に行われる。

剛留
条件式が前にあるのと、後にあるのとでは
何が違うんですか…?
みのる
条件式が true の間、継続する処理を行うことは
while文と 一緒ですね。

ただ、その処理の後に条件式を見て判断するので
必ず1回以上は処理が実行されます。

なので、1回は処理を実行したい時に
do-while 文は使われるんです。

do-while文は、予約語 do を書いて
その後に 条件式が true の間 実行するブロックを書きます。

そして、その後に while を書いて 丸括弧。
この 丸括弧の中に 継続するための条件式を書きます。

そして、丸括弧の後には ; セミコロンが必要です。

ここで ポイントは、先程もお話したように…

まず、ブロックの中を実行してから
条件式で、継続の判断をするということです。

フローチャートで書くと、こうなります。

まず最初に、処理をして、その後に条件式で継続の判断。

true であれば、左から上に戻って 再度処理を実行します。

最終的に 条件式が falseになったら
下に進んで do-while文を抜けることになります。

② do-while文の例

do-while文の例を見てみましょう。

この例では、まずキーボードから入力を受け付けて
それに応じた処理を行います。

そして、その後に 条件式 を見て
true だったら 上に戻って再度、処理を実行します。

この例の場合には、文字列が “exit” 以外だったら
do-whileを継続することになります。

input.equals(“exit”) の左側に 論理否定の !(not)が
ついていますので、”exit” 以外だったらとなります。

そして再度、キーボードから入力を受け付けて
それに応じた処理を行います。

最終的に、入力した文字列が “exit” になったら
do-while文を抜けることになるのです。

彩香
do-while文もわかったし、今回のサンプルでも
繰り返しの中で 条件分岐が出てきたので理解が深まりました。

この調子で進めていきます。

剛留
前進している事を実感しています。
引き続き、頑張ります。

【まとめ】

● 制御構造のネスト(入れ子)・do-while文

【1】制御構造のネスト
・「条件分岐」や「繰り返し」の
  制御構造の中に別の制御構造を
  含む多重構造。

・ 入れ子ともいう。

【2】do-while文
・ 繰り返しを行う構文で
  条件式が true の間
  do-while ブロックを継続する。

・ 条件式の判断は
  継続する処理の後に行われる。

・ 1回は処理を実行したい時に
  使われる