Java 条件式の基礎

JavaBeginner
オンラインで実践に進む

はじめに

この実験では、Java の基本的なデータ型と演算子について学びました。この実験では、手続き型プログラムの書き方を学び始めます。主な考え方は、制御構造のパラダイムである条件式を使用することです。

条件式

有用なプログラムを書くためには、ほとんどの場合、条件をチェックし、それに応じてプログラムの動作を変更する必要があります。条件文はその機能を提供します。

if-else 条件式

最も単純な形式は if-else 文です。

例:

以下のコードを /home/labex/project/ifelseTest.java ファイルに書きます。

public class ifelseTest{
    public static void main(String[] args){
        int x = 1;
        if (x > 0) {
            System.out.println("x is positive");
        }
        else{
            System.out.println("x is non-positive");
        }
    }
}

出力:

ターミナルで以下のコマンドを使用して ifelseTest.java ファイルを実行します。

javac /home/labex/project/ifelseTest.java
java ifelseTest

出力を確認します。

x is positive

括弧内の式は条件と呼ばれます。条件が真の場合、if の後にある中括弧内の文が実行されます。条件が偽の場合、else の後にある中括弧内の文が実行されます。else がなく、if 条件が偽の場合、if-else 文の後にある文(あれば)が実行されます。条件には、比較演算子関係演算子とも呼ばれます)を含めることができます。

例:

if (x == y){ }               // x equals y
if (x!= y){ }               // x is not equal to y
if (x > y) { }               // x is greater than y
if (x < y) { }               // x is less than y
if (x >= y){ }               // x is greater than or equal to y
if (x <= y){ }               // x is less than or equal to y

これらの演算はおそらくあなたには馴染みがあると思いますが、Java で使用される構文は、=、≠、≤ などの数学記号とは少し異なります。よくあるエラーは、二重等号 (==) の代わりに単一等号 (=) を使用することです。= は代入演算子で、== は比較演算子であることを忘れないでください。また、=<=> というものはありません。

条件演算子の両側は同じ型でなければなりません。int 型同士、double 型同士のみ比較できます。演算子 ==!=String 型でも動作しますが、期待通りの動作をしないことがあります。また、他の関係演算子は文字列に対しては動作しません。

例:x2 で割った余りが 0 の場合、x は偶数であることがわかり、このコードはその旨のメッセージを出力します。条件が偽の場合、2 番目の print 文が実行されます。条件は真または偽であるため、いずれか一方の選択肢が実行されます。数値の偶奇を頻繁にチェックする必要があると思う場合は、次のようにこのコードをメソッドにまとめることができます。

例:

以下のコードを /home/labex/project/conditionTest.java ファイルに書きます。

public class conditionTest
{
    public static void printParity(int x) {
        if (x%2 == 0) {
            System.out.println(x + " is even");
        } else {
              System.out.println(x + " is odd");
        }
    }
    public static void main(String[] args){
        printParity(17);
        printParity(18);
    }
}

出力:

ターミナルで以下のコマンドを使用して conditionTest.java ファイルを実行します。

javac /home/labex/project/conditionTest.java
java conditionTest

出力を確認します。

17 is odd
18 is even

これで、任意の整数に対して適切なメッセージを出力する printParity という名前のメソッドができました。main メソッドでこのメソッドを呼び出すことができます。メソッドを呼び出すときは、提供する引数の型を宣言する必要はないことを常に覚えておいてください。Java はそれらの型を判断できます。printParity(int 3) のような記述をしないようにしましょう。また、条件文を入れ子にすることもできます。

例:

以下のコードを /home/labex/project/nestedConditionTest.java ファイルに書きます。

public class nestedConditionTest{
    public static void main(String[] args){
        int x = 0;  // you can try x = 1, x = -1
        if (x == 0) {
            System.out.println("x is zero");
        }
        else {
            if (x > 0) {
                System.out.println("x is positive");
            }
            else {
                System.out.println("x is negative");
            }
        }
    }
}

出力:

ターミナルで以下のコマンドを使用して nestedConditionTest.java ファイルを実行します。

javac /home/labex/project/nestedConditionTest.java
java nestedConditionTest

出力を確認します。

x is zero

ここでは、2 つの分岐を持つ外側の条件文があります。最初の分岐には単純な print 文が含まれていますが、2 番目の分岐には別の条件文が含まれており、それ自体が 2 つの分岐を持っています。これらの分岐はどちらも print 文ですが、条件文であっても構いません。

インデントは構造を見やすく理解しやすくするのに役立ちますが、入れ子になった条件文はすぐに読みにくくなります。できるだけ避けましょう。一方で、このような入れ子構造は一般的であり、また見ることになるでしょう。だから、慣れておいた方がいいでしょう。

switch-case 条件式

switch-case 文は別の条件式です。switch-case 文の構文は次のようになります。

例:

// value type can be byte, short, int, char, String, but long type is not correct.
switch (variable or an value expression)
{
    // case value must be a constant value
    case value1:
    // code
    ;
    case value2:
    // code
    ;
    default:
    // code
    ;
}

例:

以下のコードを /home/labex/project/switchTest.java ファイルに書きます。

public class switchTest
{
    public static void main(String[] args){
    // you can change i = 2, then try again
    int i = 2;
    switch(i)
    {
        case 1:
            System.out.println(1);
            break;
        case 2:
            System.out.println(2);
            // if no break expression, sometimes you'll get a confusing answer.
            // you can try deleting the break expression and see what happens.
            break;
        // if none of the above matches, execute the default statements
        default:
            System.out.println("default");
            break;
        }
    }
}

出力:

ターミナルで以下のコマンドを使用して switchTest.java ファイルを実行します。

javac /home/labex/project/switchTest.java
java switchTest

出力を確認します。

2

まとめ

この実験では、条件式と 2 種類の条件文について学びました。これらはプログラミングにおいて非常に有用です。次の実験では、別の制御構造である再帰とループについて学びます。