Java Basic Level 6 〜Traning of If statement〜

イントロダクション

再度、復習の意味で以前記載したものを再度やります。
今回はIf文の使い方〜応用〜をやります。
だんだんとやることが複雑になってきます。ロジックを楽しんでください。

Introduction

I will write again what how to use value of boolean. And Tihs time, Write about Application of If statement.
It will guradually become more. enjoy create logic.

ロードマップ

  1. Booleanの扱い方
  2. If文の使い方
  3. If文の使い方〜応用編〜 今回
  4. ループ処理〜For文〜
  5. ループ処理〜For文の応用〜
  6. ループ処理〜While文〜
  7. ループ処理〜While文の応用〜
  8. ループ処理〜Do While文〜
  9. ループ処理〜Do While文の応用〜
  10. 演算子の整理
  11. 演算子の応用
  12. まとめ

Road Map

  1. How to use Boolean
  2. How to use if statement
  3. Training of  if statement This time
  4. How to use loop statement 〜While〜
  5. Training of Loop〜While〜
  6. How to use loop statement 〜While〜
  7. Training of Loop〜While〜
  8. How to use loop statement 〜Do While〜
  9. Training of Loop〜Do While〜
  10. Summary of operator
  11. Training of operator
  12. Summary

If文の使い方〜応用〜

前回は、単純なIf文、条件が1つでTrue / Flaseの判定を行いました。

今回は「If文の応用」と称してBooleanの扱い方の応用編をやろうと思います。

Application of If statement

we tried basic If statement. next it Called Application of If statement. that is application of how to use boolean

<Booleanのサンプル動画>

<解説動画>

変数の使い方

変数には「型」があります。これは「=」演算子を使用して対象の変数に値をセットするために使用します。
例えば、文字列(String)型の変数には数値はセットできません。

String str = 1;

しかし、文字列はセットできます。

String str = "1";

これらの違いは何か?というと「”(ダブルクォーテーション)」の有無です。

リテラルとは

リテラルとは、「値」のことを言います。そして、その書き方で「型」が決まってきます。
明確に言うならば「=」の左側が「変数」で右側が「リテラル」です。

※While文の解説とリテラルの解説をしています。

Booleanの演算方法あれこれ

今までの、論理演算=>「1 == 1」とか「"aaa".equals("aaa")」のようなシンプルなものでした。今度は実際に使用できるようにちょっと複雑にした論理演算を行いたいと思います。

<解説>

public static void main(String[] args) {
   boolean flg = false;
   if ("test".equals(args[0])) {
      flg = true;
   }
   // 条件演算子(三項演算子)
   int val = flg ? 1 : 0;
   if (val == 1) {
     System.out.println("プログラム引数はtestです");
   } else {
     System.out.println("プログラム引数はtestではありません");
   }
}

boolean「flg」をfalseで初期化します。
プログラム引数が「test」の場合、flgをtrueに変更します。
そして、ここがキモになります。
flgがtureであれば「1」、falseであれば「0」を変数valに設定します。

あとは、問題なく読めると思います。
読めなかったら、一個前のブログに戻って見てください(まとめを覗きます)

三項演算子

三項演算子は次のように使います。1行で処理を書けます。

変数 result = 論理演算 ? TRUEの場合 : FALSEの場合;

これをIF文で行うと下のようになります。

変数 result;
if (論理演算) {
   result = TRUEの場合;
} else {
   result = FALSEの場合;
}

筆者としては三項演算子を使う方が好きなコードです。

「かつまた」を使う

「かつまた」?なんじゃ?と思った方正常でございます。つまりは、「&&」と「||」の使い方を記載したいということです。
論理演算なので、論理的に考えてみたいと思います。
<解説>

こんな時はフローチャートを使用するとわかりやすいです。

上のフローチャートは作成中のテキストRPGの処理を表したものです。

処理の順番を示しているところでひし形のマークが条件分岐を表します。この条件分岐をするときに使用するのがBooleanであり、これを複数の条件を考慮して判定したい時に「かつまた」を使用する。。。というわけです。

Booleanと「かつまた」の使い方

条件分岐ではTRUEとFALSEで基本的には2つの分岐を行います。

if (論理演算) {
   // TRUEの場合
} else {
   // FALSEの場合
}

しかし、現実にはもっと条件を増やしたい場合があります。

「かつ」の使い方

論理演算1と2を使いたい時などで、「かつ」が利用できます。これは下の表のように論理演算が行われます。

論理演算1 AND 論理演算2 結果
TRUE && TRUE TRUE
TRUE && FALSE FALSE
FALSE && TRUE FALSE
FALSE && FALSE FALSE
if (論理演算1) {
   // 論理演算1がTRUEの場合※論理演算2はFALSE
   if (論理演算2) {
     // 論理演算1がTRUE「かつ」論理演算2がTRUE
   }
} else {
   // 論理演算1がFALSEの場合※論理演算2もFALSE
   if (論理演算2) {
     // 論理演算1がFALSE「かつ」論理演算2がTRUE
   }
}

上のように書くと、筆者的にはあまり好みではありません。
なので、下のように書きたいと思うのです。これでネストする必要がありません。
そして、「論理演算」のみの部分はTRUEであればかっこの中に処理が進みます。明確にすると下の表のようになります。

NO 論理演算1 論理演算2
1 true false
2 true true
3 false false
4 false true
if (論理演算1 && 論理演算2 == false) {
   // No1. 論理演算1がTRUEの場合「かつ」論理演算2がFALSE
} else if (論理演算1 && 論理演算2) {
   // NO2. 論理演算1がTRUE「かつ」論理演算2がTRUE
} else if (論理演算1 == false && 論理演算2 == false) {
   // NO3. 論理演算1がFALSE「かつ」論理演算2がFALSE
} else if (論理演算1 == false && 論理演算2) {
   // NO4. 論理演算1がFALSE「かつ」論理演算2がTRUE
}

説明のために上のように並べましたが、見ずらいので下の用に書き換えた方が良いと思います。下のように入れ替えます。
普通に、そろっている方が見やすいですよね。

NO 論理演算1 論理演算2
2 true true
1 true false
4 false true
3 false false
if (論理演算1 && 論理演算2) {
   // NO2. 論理演算1がTRUE「かつ」論理演算2がTRUE
} else if (論理演算1 && 論理演算2 == false) {
   // No1. 論理演算1がTRUEの場合「かつ」論理演算2がFALSE
} else if (論理演算1 == false && 論理演算2) {
   // NO4. 論理演算1がFALSE「かつ」論理演算2がTRUE
} else if (論理演算1 == false && 論理演算2 == false) {
   // NO3. 論理演算1がFALSE「かつ」論理演算2がFALSE
}

「また」の使い方

「かつ」と似て非なるものです。「かつ」のほぼ逆の演算結果を返します。
「かつ」の場合は、両方とも「TRUE」のときのみTRUEを返しましたが、「また」の場合は両方とも「FALSE」の時のみ「FALSE」を返します。

論理演算1 OR 論理演算2 結果
TRUE || TRUE TRUE
TRUE || FALSE TRUE
FALSE || TRUE TRUE
FALSE || FALSE FALSE

下の処理の場合は、初めの「NO2」がTRUEになるので、NO2の処理を行いますが、ほかの部分もTRUEになるので不適当なコードになります。

NO 論理演算1 論理演算2
2 true true
1 true false
4 false true
3 false false
if (論理演算1 || 論理演算2) {
   // NO2. 論理演算1がTRUE「かつ」論理演算2がTRUE
} else if (論理演算1 || 論理演算2 == false) {
   // No1. 論理演算1がTRUEの場合「かつ」論理演算2がFALSE
} else if (論理演算1 == false || 論理演算2) {
   // NO4. 論理演算1がFALSE「かつ」論理演算2がTRUE
} else if (論理演算1 == false || 論理演算2 == false) {
   // NO3. 論理演算1がFALSE「かつ」論理演算2がFALSE
}

まとめた形の「かつまた」使用例

下のコードは「かつ」しか使っていないですが。。。
下のコードは、XMLファイルを読み込んだ後に、タグに対応したクラスを生成する処理を行っています。
タグ名、階層の深さ(level)、親クラスの3つを引数に持っています。

それぞれ、条件としては以下の通りです。

<パターンA>

  1. タグ名がXXXの時、かつ階層がレベルXXの時
  2. XXXクラスを生成し返却

もしくは、

<パターンB>

  1. タグ名がXXXの時、かつ階層がレベルXXの時
  2. 親クラスのフィールドを生成し対象クラスをセット
    public static ConfigIF createConfig(String tagName, int level, ConfigIF conf) {
        Class<? extends ConfigIF> child = null;
        if (StoryConfig.WORLD_TAG.equals(tagName) && level == 0) {
            // パターンA
            return new World();
        } else if (StoryConfig.NATURE_TAG.equals(tagName) && level == 1) {
            // 以下パターンB
            // 自然
            World world = (World) conf;
            world.setNature(new Nature());
        } else if (StoryConfig.CLIMATE_TAG.equals(tagName) && level == 2) {
            // 気候
            World world = (World) conf;
            world.getNature().getClimateList().add(new Climate());
   }

上記の例は、「かつ」の例です。
この「かつ(&&)」を「または(||)」にすれば、条件が変わるというわけです。

「かつまた」= ANDとOR

上記の演算子は、かつ(AND)とまたは(OR)のことを言いたかっただけですので、深く考えないようにしてください。
論理演算は、使用するデータ量が少ない(1bit)なので、うまく使うとSDGsなコードになります。

何度も同じようなことを記載しますが、次のようになっています。

// TRUE && TRUE => TRUE
boolean isTrure = true && true;
// FALSE && TRUE => FALSE
boolean isFalse = true && true;
// TRUE && FALSE => FALSE
boolean isFalse1 = true && true;
// FALSE && FALSE => FALSE
boolean isFalse2 = true && true;

// TRUE || TRUE => TRUE
boolean isTrure = true || true;
// FALSE || TRUE => TRUE
boolean isTrure1 = false || true;
// TRUE || FALSE => TRUE
boolean isTrure2 = true || false;
// FALSE || FALSE => FALSE
boolean isFalse = false || false;

早い話が。。。

  • 「かつ(&&)」は両方ともTRUEの時のみTRUE
  • 「または(||)」は両方ともFALSEの時のみFALSE

というわけです。

<問題>
2つのプログラム引数に数字を渡して、2つの値を足し算した結果をコンソールに出力するプログラムを作成してください。

Some way of using Boolean

we tried simple way of using boolean. like (1 == 1) and ("aaa".equals("aaa"))

Eclipse セットアップ

  1. Java Install Eclipse〜開発ツールのインストール〜
  2. TensorFlow C++環境〜EclipseCDTをインストール〜
  3. Setup OpenGL with JavaJOGLを使う準備 for Eclipse
  4. Eclipse Meven 開発手順〜プロジェクトの作成〜
  5. Java OpenCV 環境セットアップ(on Mac)
  6. Eclipse SceneBuilderを追加する
  7. JavaFX SceneBuilder EclipseSceneBuilder連携~

Java Basic一覧

  1. Java Basic Level 1 〜Hello Java〜
  2. Java Basic Level2 〜Arithmetic Calculate〜
  3. Java Basic Level3 〜About String class〜
  4. Java Basic Level 4〜Boolean〜
  5. Java Basic Level 5〜If 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 9〜Training 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 〜テストスイートの作り方〜

Git関連

  1. Java Git clone in Eclipse 〜サンプルの取得〜
  2. Eclipse Gitリポジトリの取得 GitからソースをPullしよう〜
  3. IntelliJ IDEA GitGitリポジトリからクローン〜

投稿者:

takunoji

音響、イベント会場設営業界からIT業界へ転身。現在はJava屋としてサラリーマンをやっている。自称ガテン系プログラマー(笑) Javaプログラミングを布教したい、ラスパイとJavaの相性が良いことに気が付く。 Spring framework, Struts, Seaser, Hibernate, Playframework, JavaEE6, JavaEE7などの現場経験あり。 SQL, VBA, PL/SQL, コマンドプロント, Shellなどもやります。

コメントを残す