インントロダクション
前回、四則計算のプログラムを書くと記載しながら以下の内容に関して記載しました。
- クラスの作り方
- メソッドの書き方
- int型とString型の変数
この部分はこれから作成するプログラムを理解するために必要なことなので少し長い記述になりました。
四則計算をする
四則計算は算数でやったのと同じです。というかパソコンをコントロールするのがプログラム→電卓の大きなものをコントロールするので計算方法は電卓と同じです。
<注意>
ただし掛け算に関して「x」ではなく「*」を使用します。そのほか、べき乗など学校で習うような書き方ではなく(パソコンで入力ができない?)「^」キャレットを使用して表現します。
ソースコード
初めに作成したコードはこちらにありますが、これを修正していく形でどんどん大きなことを実装していきます。ちなみにプログラム引数を表示する処理が増えてます。
public class Lv2HelloWorld { 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!"); } }
このコードを拡張して四則計算を行うように修正します。
現状では。以下のような処理になっています。
- プログラム引数を表示する
- 標準入力を受ける(コンソールの入力を取得する)
- 入力値が「hello」の場合は「Hello World!」をコンソールに表示
- それ以外は「想定外の入力です。」と表示してプログラムを終了する(while文を抜ける)
- ループして2まで戻り繰り返す
上記のような処理をしています。このままでは「hello」以外の入力を行えばプログラムが終了してしまうので、ここの部分に、今回の「四則計算を行う」処理を追加します。
具体的に
以下のような処理を行うように設計します(多くの人は頭の中でやってしまいます、プログラムが小さいからです。)。
- プログラム引数を表示する
- 標準入力を受ける(コンソールの入力を取得する)
- 入力値が「hello」の場合は「Hello World!」をコンソールに表示
- 入力値が「?」 + 「計算の記号」 + 「?」が入力された時に四則計算を行い、計算結果をコンソールに表示する
- それ以外は「想定外の入力です。」と表示してプログラムを終了する(while文を抜ける)
- ループして2まで戻り繰り返す
このように設計しました。上の赤い字の部分が追加したところです。
この追加部分の処理について見ていきます。
追加した処理
まずはコード上で追加する部分を明確にします。
設計上では「4」の部分が追加しているところなので処理もその部分を見つけます。
if ("hello".equals(inStr)) { System.out.println("Hello World!"); } else { System.out.println("想定外の入力です"); break; }
の部分がこれにあたりますので、ここに「入力値がXXX」だったら。。。の処理を追加します。
自分の作成した答えはこちらです。プルダウンで開きます。
if ("hello".equals(inStr)) { System.out.println("Hello World!"); } else if (inStr.matches("[0-9].*[0-9]")) { int answer = myClass.calculate(inStr); System.out.println("答えは:" + answer + "です。"); } else { System.out.println("想定外の入力です"); break; }
IF文で使用している「"[0-9].*[0-9]"」の部分を「[正規表現](http://www.turtle.gr.jp/techno/regular-expression.html)」と呼び文字列に対してルールを強いるものです。
例えば、入力した文字列が「メールアドレスかどうか?」を判定するのにも正規表現を使用します。「XXXX@XXX.XXX」のように一定の文字の並びかたが正規表現で指定したものになっているかどうか?を判定するために使用します。
ここに簡単なサンプルを記載してあります。指定の文字列をから文字に変換(削除)する処理を作成しています。
ちなみにjava.lang.String#matchies()では正規表現を引数に持っています。詳細は[リンク先のJavaDoc](https://docs.oracle.com/javase/jp/8/docs/api/java/lang/String.html#matches-java.lang.String-)を見てみてください。
一応ですが、「正しい答え」というものはありません。想定通りに動けばそれが正解です。人生の中で「正解」がないのと同じです。
ちなみに自分の作成したものは次のように動きました。
作成したコードはGitにあります。
ちなみに、テストクラスも作成しました。入力した文字を判定する処理のテストです。このクラスの名前にはお尻の部分に「Test」をつけて「Lv2__1_CalculateTest」とするのが規約に則ったやり方なのですが、つけ忘れてしまいました。
このまま修正しないでいると、後々に何かしらのミスをやります。。。
まとめ
ここで、実装のサンプルとかそんなものを記載しようかと思ったのですが、Gitにあげるまでにしておきます。
感覚としてはパズルとか、なぞなぞを解くような感じで追加で設計した部分を実装して見てください。
余談
テストを作成〜テストの実行までを動画にしました。
でわでわ。。。
- Java Basic Level 1 〜Hello Java〜
- Java Basic Level2 〜Arithmetic Calculate〜
- Java Basic Level3 〜About String class〜
- Java Basic Level 4〜Boolean〜
- Java Basic Level 5〜If Statement〜
- Java Basic Summary from Level1 to 5
- Java Basic Level 6 〜Traning of If statement〜
- Java Basic Level8 〜How to use for statement〜
- Java Basic Level 8.5 〜Array〜
- Java Basic Level 9〜Training of for statement〜
- Java Basic Level 10 〜While statement 〜
- Java Basic Swing〜オブジェクト指向〜
- Java Basic Swing Level 2〜オブジェクト指向2〜
- サンプル実装〜コンソールゲーム〜
- Java Basic インターフェース・抽象クラスの作り方
- Java Basic クラスとは〜Step2_1〜
- Java Basic JUnit 〜テストスイートの作り方〜