Java Mid Basic 〜Lv2_Javaの基本(コードの書き方)ゲームループ付き〜

イントロダクション

前回は、とりあえず入力して画面に表示するものを作成しました。こんな感じです。

動画は、作成中にデバッックしたものです。ちなみにバグもあります。
とりあえずは「動いた!」という感動を味わっていただきたく思い中途半端ですが、アプリとして動くものを作成しました。
コードはGitにアップしています。

最終的にはコンソールゲームを作ります。

AP概要Lv2

標準入力を受け付けて、以下のような動きをします。

  1. 入力された文字が「hello」の時はコンソールに「Hello World!」と表示する。
  2. そのほかの文字を入力したら「想定外の入力です」を表示する。

四則計算をする

今回のメインになる実装を行います。前回の記事で問題を出しました。ちょっと難しい問題でした。上の動画はデバック中の動画になります。バグも残っています(笑)。

まずは書いたコードの理解

前回作成したコードをもう一度眺めてみます。

public class Lv2HelloWorld {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        while(true) {
            System.out.print("入力してください: ");
            String inStr = input.nextLine();
            if ("hello".equals(inStr)) {
                System.out.println("Hello World!");
            } else {
                System.out.println("想定外の入力です");
                break;
            }
            System.out.println("Next command ... ");
        }
        System.out.print("AP is fiinished. Bye!");
    }
}

頭(行の先頭)からコードの意味を記載していきます。

クラスの定義

上のコードで行くと、下の部分がクラス定義になります。

public クラス名{ .... }

このクラス名はなんでも良いのですが、下のルール(大雑把な規約)にしましょう。ちなみにCheckStyleというEclipseのプラグイン(標準装備)を使用すると簡単に規約違反が見つけられるので便利です。参考サイト

  • メタ文字:%/\&'*)など、これらはEclipseなどのIDE(開発ツール)を使用するとエラーが出るので安心です。
  • Javaのクラスはアッパーキャメルケース("AppaKyameru"のように書く)を使用します。
  • Javaのメソッドはキャメルケース("appaKyameru"のように書く)を使用します。

とりあえずはこんなところを気をつけましょう。

メイン・メソッドの定義

まずは動かしたいので「メインメソッド」を作成します。メインメソッドは以下のような特徴があります。

  1. メソッドの定義は1つだけ、ほかの書き方はない。
  2. 必ずこのメソッドが動く
  3. 引数は「プログラム引数」になる

プログラム引数

プログラム引数はEclipseで使用する場合は下のように値を渡してあげます。つまりString[] argsの部分が引数であり、下のように設定してアプリを起動すると変数「args」に"プログラム引数1"のように値を渡せます。
注意として、プログラム引数は「String」型のデータになります。

ちなみに「データ型」に関しては後々に触れますが、現在使用しているデータ型は「int」「String」があります。

int型

調べてみると「???〜???までの整数」などのように記載されてますが、早い話が、範囲指定はあるけど(正負の)整数です。Stringなどの「オブジェクト型」とか「参照型」など(同義です)と違い、直接の値(メモリの領域)を保持します。

String型

これはjava.lang.Stringというクラスの型になります。intと違い「クラス」なので「null」が存在します。よく「参照型」とか「オブジェクト型」などと呼ばれます。早い話が「NULLが存在する型」なんだな!と理解してくれればOK!今後深く理解していきます。int型などのように直接、値を持つ変数と違いオブジェクトへの参照(ポインタ)を変数に持ちます。だからNULLがあるのです。

次は実装

すでに書いたコードに追記・編集していきます。前回作成したメインメソッド部分では「Hello World」と「想定外 ....」を出力するだけだったので、この部分を拡張します。
元のコード

public static void main(String[] args) {
    System.out.println("プログラム引数のサイズ:" + args.length);
    for (int i = 0; i < args.length; i++) {
        System.out.println("プログラム引数:" + args[i]);
    }
    Scanner input = new Scanner(System.in);

    while(true) {
        System.out.print("入力してください: ");
        String inStr = input.nextLine();
        if ("hello".equals(inStr)) {
            System.out.println("Hello World!");
        } else {
            System.out.println("想定外の入力です");
            break;
        }
        System.out.println("Next command ... ");
    }
    System.out.print("AP is fiinished. Bye!");
}

編集後のコード

public static void main(String[] args) {
    // 今回は作成したこのクラスを使用します。
    Lv2_1_Calculatie myClass = new Lv2_1_Calculatie();

    Scanner input = new Scanner(System.in);

    while(true) {
        System.out.print("入力してください: ");
        String inStr = input.nextLine();
        if ("hello".equals(inStr)) {
            System.out.println("Hello World!");
        } else if (inStr.matches("[0-9].*")) {
            int answer = myClass.calculate(inStr);
            System.out.println("答えは:" + answer + "です。");
        } else {
            System.out.println("想定外の入力です");
            break;
        }
        System.out.println("Next command ... ");
    }
    System.out.print("AP is fiinished. Bye!");
}

具体的に下の部分が変わりました。

Lv2_1_Calculatie myClass = new Lv2_1_Calculatie();
} else if (inStr.matches("[0-9].*")) {
    int answer = myClass.calculate(inStr);
    System.out.println("答えは:" + answer + "です。");

new Lv2_1_Calculatie()の部分は作成したクラスのインスタンスを取得しています。
インスタンス化すると「インスタンスメソッド」が使えるようになります。

インスタンスメソッドとスタティックメソッド

インスタンスメソッド:A a = new A();のように「new」してから使用する
スタティックメソッド:A.staticMethod()のようにクラス名.メソッド名で呼ぶことができる
上のような違いがあります。

まとめ

クラスとメソッドの書き方、メソッドの種類について触れました。結局計算する部分には触れませんでしたので次回触れようと思います。
でわでわ。。。



  1. Java Basic Level 1 Hello Java
  2. Java Basic Level2 Arithmetic Calculate
  3. Java Basic Level3 About String class
  4. Java Basic Level 4Boolean
  5. Java Basic Level 5If Statement
  6. Java Basic Summary from Level1 to 5
  7. Java Basic Level 6 Traning of If statement
  8. Java Basic Level8 How to use for statement
  9. Java Basic Level 8.5 Array
  10. Java Basic Level 9Training of for statement
  11. Java Basic Level 10 While statement
  12. Java Basic Swing〜オブジェクト指向〜
  13. Java Basic Swing Level 2〜オブジェクト指向2
  14. サンプル実装〜コンソールゲーム〜
  15. Java Basic インターフェース・抽象クラスの作り方
  16. Java Basic クラスとは〜Step2_1
  17. Java Basic JUnit 〜テストスイートの作り方〜