Java はじめて13 〜ループ処理C: do-while文〜

イントロダクション

while文の別バージョンです。while文はループする条件が最初に来ますが、do-whileは最後に来ます。
具体的には下のような形です。

<while文>

while (条件){
  // ループする処理
}

<do-while>

do {

} while(条件);

whileを使うか、do-whileを使うか。。。正直のところ、「実装者の好み」になると思っていますが、両方とも知っておくだけで、いざという時に使用することができるので、知っておいた方が、知らないより良いといったところです。

ポイント

do-whileの場合は、whileの場合と違い、1度は必ず処理が走るというところです。この部分はロジックにより使える文法だと思います。

実装動画

解説動画

do-while

今回は、do-while文をやります。正直のところこの文はあまり使わないのですが、知っておいて損はないのと、考えの幅が広がるので覚えておいて損はありません。

while文との違い

do-while文はwhileやfor文と違い、処理の後ろの方でループ判定を行います。ループ判定はFalseになると処理を抜けます。

do{
   // 何かしらの処理
} while(i < 3);

上のような書き方を行います。
ちなみに通常のwhile文は下のように書きます。

public static void main(String[] args) {
   int i = 0;
   while(i < 3) {
       System.out.println("カウント: " + i);
       i++;
   }
}

これと同じ処理をdo-whileで書くと

public static void main(String[] args) {
   int i = 0;
   do {
       System.out.println("カウント: " + i);
       i++;
   } while(i < 3);
}

上のようになります。
正直のところ、これ以上ではないし、これ以下でもないので他に書くようなことはありません、あとは実際にプログラムを書いて動かして、自分の頭の中でプログラムを組み立てる練習、実践を繰り返していくことが全てなので。。。

問題

do-while文を一回使用して、コンソール出力にて下のような絵を描画してください。「*(アスタリスク)」を使って描画します。
上から順にアスタリスクが1個, 2個, 3個, 4個, 5個, 6個と並んでいます。

*
**
***
****
*****
******

<Java関連の動画リスト>

基本文法終了

ここまでの学習で、基本文法は終了です。これからはクラスを使った学習を始めていきます。
その前に、一度電卓アプリを作成することをお勧めします。

電卓アプリの仕様

電卓アプリといっても、標準入力と標準出力を使った単純なものです。
陽男県としては以下のようになります。

  1. 標準出力を受けて、数字と「+, -, *, /」のみの入力を許容する
  2. 計算式「XXX ○ □□□」のような形でエンターキーを押下した後計算結果を表示する

筆者が作成した、電卓アプリ(四則演算アプリ)配下のような感じです。※アプリ=アプリケーション

アプリのサンプル

四則演算の解説

でわでわ。。。

<<< 前回 次回 >>>

Java はじめて12 〜ループ処理B: while文〜

イントロダクション

while文は今までやった、for文との大きな違いは、「シンプル」というところです。
具体的には、「無限ループしたい」と思ったらなら下のようなコードでできます。

while (true) {
   // この部分が無限ループする
}

この無限ループを使用して、下のようなゲームを作成してみました。

while文の書き方

今回はwhile文をやります。今までのfor文と同じような感じですが、とてもシンプルです。whileの中の条件がFalseになると処理を抜けます。

while(条件) {
     // 処理
}


for文と比べて、初期化処理とか後処理がないので、まぁ楽です。
実際にコンソールゲームを作成するのにもwhile文を使用しています。初期化処理などが入らないので。。。

public static void main(String[] args) {
    Lv3_3_RefactorLv2 main = new Lv3_3_RefactorLv2();
    // 標準入力
    Scanner input = new Scanner(System.in);

    while(true) {
        System.out.println("コマンドを入力してください: ");
        String inStr = input.nextLine();
        CommandIF cmd = main.getCommandIF(inStr);
        if (cmd != null) {
            cmd.execute();
            continue;
        }
        if ("bye".equals(inStr)) {
            System.out.println("Good Bye");
            break;
        } else {
            System.out.println("対象のコマンドは登録されていません。: " + inStr);
        }
    }
}

これは無限ループを行なっているので、条件を指定しているのとは違うのですが。。。

public static void main(String[] args) {
   int i = 0;
   while(i < 3) {
       System.out.println("カウント: " + i);
       i++;
   }
}

これは、よくある形のwhile文です。for文と同じようなことをやっています。

問題

while文を一回使用して、コンソール出力にて下のような絵を描画してください。「*(アスタリスク)」を使って描画します。
上から順にアスタリスクが1個, 2個, 3個, 4個, 5個, 6個と並んでいます。

*
**
***
****
*****
******

<Java関連の動画リスト>

ゲームループ

シンプルに無限ループの中に、ループを抜ける条件をつけてやるような形での実装です。
LWJGLの解説をしているときのゲームループは入力~画面の更新まで実装していましたが、今回は細かい部分を省略しています。

//標準入力
Scanner scan = new Scanner(System.in);
while (true) {
    String input = scan.nextLine();

    if ("bye".equals(input)) {
        // ループを抜ける
        break;
    }
}

<処理内容>

  1. 標準入力を受け取ります。
  2. "bye"と入力されたときプログラムを終了します。

逆にいうと、"bye"と入力しなければ、何を入力しても、ループして再度入力を求める処理が走ります。
String input = scan.nextLine();この処理で、入力を受け取ります。

なので、次のようなプログラムも組みやすいということです。

  1. 入力を受ける。
  2. 計算をする。
  3. 計算結果を表示する。

単純な電卓アプリを作成することも容易です。

他にも、このような形での実装は、いろんな部分で使用されます。

さらに。。。

他にも、ループ文があるので、使いやすいものを使用してアプリを作って遊んでみるのが良い学習になります。
でわでわ。。。

<<< 前回 次回 >>>

Java はじめて 11 〜ループ処理A: for文2 拡張for文〜

イントロダクション

前回やったFor文よりも簡単な書き方ができるFor文です。これは配列や、リスト(Listインターフェース)などのコレクション(Collection)をループするときに便利な書き方です。
もちろん、配列でも便利です。
<実行してみた>

拡張for文の書き方

今回は、拡張for文の書き方をやります。書き方は以下のようになります。

for (取り出した変数 : 配列などの変数) {
    // 何かしらの処理
}

for文+if文


for文+switch文


前回のfor文

前回やったfor文は昔からあるもので、色んな事に使用できます。下のような書き方です。

for (初期化 ; ループ条件 ; ループする時の処理) {
   // 何かしらの処理
}


拡張for文

一言で言えば使いやすい、なのですが、それは配列やリストをループする時の話です。使い方次第では色んなことができると思います。実際に使用できるサンプルコードを下に示します。

配列でループ

配列は、データが一つの変数に複数の値が番号付きで並んでいるよう名イメージです。目で見えるものではないので、自分なりのイメージを持つと理解しやすいと思います。下の動画は、While文を使っていますが、配列に関して解説した動画になります。

public static void main(String[] args) {
   String[] arr = new String[]{"一郎", "二郎", "三郎"};
   for (String name : arr) {
      System.out.println("私の名前は、" + name + "です");
   }
}

こんな感じです。ちなみにリストでやる場合も同じような形です。

List

public static void main(String[] args) {
   List<String> list = new ArrayList<String>;
   list.add("一郎");
   list.add("二郎");
   list.add("三郎");
   for (String name : list) {
      System.out.println("私の名前は、" + name + "です");
   }
}

ラムダ式

public static void main(String[] args) {
   List<String> list = new ArrayList<String>;
    List<String> list = new ArrayList<>();
    list.add("一郎");
    list.add("二郎");
    list.add("三郎");
    // ここがラムダ式
    list.forEach(System.out::println);
} 

<For文を使ってみた>

<String型とchar型>※後半にfor文の実装を行なっています。

問題

for文を一回使用して、コンソール出力にて下のような絵を描画してください。「*(アスタリスク)」を使って描画します。
上から順にアスタリスクが1個, 2個, 3個, 4個, 5個, 6個と並んでいます。

*
**
***
****
*****
******

問題2

拡張for文を使用して、次のコードを書き換えてください。

public class Mondai() {
    public static void main(String[] args) {
        int[] numArray = new int[] {3, 2, 1, 0};
        String[] strArray = new String[] {"あああ", "aaa", "bbb", "おおお"};

        for (int i = 0; i < 4; i++) {
            int val = numArray[i];
            System.out.println(val + "番目の値: " + strArray[val]);
        }
    }
}

でわでわ。。。

<<< 前回 次回 >>>



Java はじめて 10 〜ループ処理A: for文1〜

イントロダクション

プログラミングの基本、ループ文の代表選手「For文」を学習します。これが使えるようになるとたくさんのデータを扱うことができるようになります。

FOR文の学習

Javaでのループ処理の代表選手「for文」を理解します。

for文の書き方

for (初期化 ; ループ条件 ; ループする時の処理) {
   // 何かしらの処理
}

というような形で実装します。具体的には下のように書きます。これは、ループを5回繰り返し0〜4をコンソールに表示するプログラムです。

基本的なFOR文

カウンター変数の「i」を0からカウントアップしていき、特定の値に達したところで終了します。
カウントアップをしている処理は「i++」の部分んです。俗にいう「インクリメント」というやつですね。。。

public static void main(String[] args) {
   for(int i = 0; i < 5; i++) {
      System.out.println("カウント" + i);
   }
}

このような形でfor文は作ります。for文の動きは以下のようになります。1. 初期化処理=int i = 0; が走り、int型の変数「i」が0で初期化されます。

  1. ループ条件=i < 5がtrueの時ループする。1回ループするたびに変数「i」がインクリメント「プラス1」されて「i」が0〜4まで増えます。
  2. 1回の処理が終わったらループする時の処理=i++(インクリメント)を実行する
  3. ループ条件でfalseの時にループを抜ける

    変形のFOR文

    上記のものは、カウンター変数「i」が0から4まで。。。という形でしたが、次は10から6までという形のFOR文です。
    上記の処理とは逆にカウントダウンしています。なので「i++」だった部分は「i--」になります。
    俗にいう「デクリメント」というやつです。

public static void main(String[] args) {
   for(int i = 10; i > 5; i--) {
      System.out.println("カウント" + i);
   }
}

FOR文の動きをまとめると下のようになります。

  1. int型の変数「i」が0で初期化
  2. 論理演算(trueかfalseが判定される(返される))「i < 5」がtrueの間ループが実行される。全体的には「i」が0〜4の間ループされるので、5回ループする
  3. あと処理を行う。具体的には、「{」「}」の間の処理を実行後に「i++」が実行される。1回ループすると「i」が0から1になる。

FOR文の実用例

<iframe width="618" height="498" src="https://www.youtube.com/embed/Y6BMXOXTiJM"; title="javaプログラミングの初めの26歩目、メソッドを作成して使用してみました。処理内容には拡張FOR文を追加、詳細は説明に記載します。" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

<iframe width="560" height="315" src="https://www.youtube.com/embed/Y6BMXOXTiJM"; title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

以前やった配列をよく使用します。
配列の中身を取り出して、何かしらの処理を行いたい時がよくあります。こんな時は以下のような実装を行います。

public static void main(String[] args) {
   String[] arr = new String[] {"a", "b", "c"};
   for(int i = 0; i < arr.length; i++) {
      System.out.println(arr[i];
   }
}

フロー図を書くと下のようになります。

問題

for文を使って1〜10までの合計を計算し、結果を表示するプログラムを書いてください。
<表示結果>

1+2=3
3+3=6
6+4=10
  ・
  ・
  ・

動画でやってみると、配列を使った形ですが、下のような感じです。

他にも作成しました。

健闘を祈ります。

でわでわ。。。

<<< 前回 次回 >>>

Java はじめて 9 〜switch文〜

イントロダクション

前回やったif文と同じように条件分岐を行う構文です。
ifでやるより、switchの方が「変数の値がXXXの時」ということがわかりやすいです。

最終的には、コードを書く人の好みになってしまいますが。。。

Switch文

今回は、switch文の書き方、使い方(サンプルコード)をやります。switch文はif文と同様に、文字列と数値で判定できます。
※JDK1.8では文字列が使用可能、しかし古いJDKでは使えないかも?

ちなみに前回の記事はこちらです。前回の内容を踏まえて記載しています。

switch文の書き方

switch(判定する値) {
    case 値がXXXの時のケース :
    // 処理1
    case 同上:
    // 処理2
    default:
    // 上記以外のケース
}

こんな感じです。if文と何が違うのか?見た目が違いますね。。。なので、前回作成したプログラムはif文で作成しましたが、switch文で書き直すことができます。
<前回のコード>

Scanner scan = new Scanner(System.in);
String str = scan.nextLine();

if ("aaa".equals(str)) {
    System.out.println("aaaが入力されました。");
} else {
    System.out.println("そのほかの値が入力されました。");
}

<処理内容>

  1. 標準入力クラスを生成(java.util.Scanner)
  2. 入力1行分(入力後にエンターキーを押下したときの全部)を取得(変数strにセット)
  3. strの値が「aaa」と等しいとき「aaaが入力されました。」を表示
  4. strの値が「aaa」と等しくないとき「そのほかの値が入力されました。」を表示

※「"aaa".equals(str)」はstrの値が「aaa」の時にtrueを返します。

コードを書き直す前に、一回動かしてみましょう。
全体のコードは下のようになります。

import java.util.Scanner;
public class MainMethodTest {
    public static void main(String[] args) {
        System.out.println("Hello World");
        MainMethodTest main = new MainMethodTest();
        // 標準入力を受ける
        Scanner scan = new Scanner(System.in);
        String str = scan.nextLine();
        if ("aaa".equals(str)) {
            Systme.out.println("aaaが入力されました。");
        } else {
            System.out.println("その他の値が入力されました。");
        }
    }
}

これは、単純にif文で書いた時のもの。。。これを書き換えてswitch文に変更します。

public static void main(String[] args) {
    System.out.println("Hello World");
    MainMethodTest main = new MainMethodTest();
    // 標準入力を受ける
    Scanner scan = new Scanner(System.in);
    String str = scan.nextLine();
    switch (str) {
    case "aaa":
        System.out.println("aaaが入力されました。");
    default:
        System.out.println("その他の値が入力されました。");
    }
}

これで動かしてみます。

ん?何か余計なものが出力されています。「その他の〜」
は表示されちゃいけないはず。。。

そうなんです。「break」がないので処理がdefaultの部分も通ってしまうのです。
この「break」はループしている時にも使えるコードで、「処理を抜ける」という意味があります。ちょっと上のコードに「break」を加えて実行してみます。

public static void main(String[] args) {
    System.out.println("Hello World");
    MainMethodTest main = new MainMethodTest();
    // 標準入力を受ける
    Scanner scan = new Scanner(System.in);
    String str = scan.nextLine();
    switch (str) {
    case "aaa":
        System.out.println("aaaが入力されました。");
        <b>break;</b>
    default:
        System.out.println("その他の値が入力されました。");
    }
}

こんな感じで実装します。〜文は基本ですが、実際にアプリケーション(ゲームも含む)を作成しようとした時の土台になります。ここら辺を理解して、オブジェクトの組み合わせ方を理解してやれば、想い通りのアプリケーションができるかも?
※何かをやろうとした時に「イレギュラー」はつきものです。やはり「根性」で突破するしかないような気がします(笑)

そんなわけで、今回のswitch文はここまでにしようと思います。

でわでわ。。。

<<< 前回 次回 >>>

関連ページ

Java Mid Basic

Java Basic

やったこと一覧