2

コマンド ライン パラメーターとして渡された後、変数に割り当てられる 3 つの整数があります。それぞれの整数が 1 から 5 の範囲にあることを検証したいと思います。以下のような if ステートメントを使用せずに Java でこれを達成する方法はありますか? 私はこれを避けたいです(注-疑似コード):

if ((a & b & c) > 0 && (a & b & c) < 6) {
//blah blah
}

主に、将来追加のパラメーターが追加された場合など、これはうまくスケーリングされません。これを達成するためのよりエレガントな方法はありますか?

4

4 に答える 4

10

(読みやすさのために)できると思う唯一の改善点は次のとおりです。

public boolean isInRange(int i) {
    return i > 0 && i < 6;
}

次に、代わりにその関数を呼び出します。

ab、およびが関連している場合cは、配列を使用してそれをループすることも検討できます。何かのようなもの:

public boolean allInRange(int[] arr) {
    for (int i = 0; i < arr.length; i ++) {
        if (!isInRange(arr[i])) return false;
    }
    return true;
}
于 2013-02-18T21:56:52.497 に答える
6

このようなものはどうですか:

validate(int ... args) {
    for (int arg : args) {
        if (arg < 1 || arg > 5) {
            throw IllegalArgumentException("Argument is not in valid range [1..5]: " + arg);
        }
    }
}

次に、このヘルパーメソッドを呼び出します

validate(a,b,c);
于 2013-02-18T22:01:22.583 に答える
1

整数を渡すメソッドを作成すると、そのメソッドはboolean範囲内にあるかどうかに応じて を返すことができます。

もう 1 つの方法は、整数のリストList<Integer> myListまたは整数の配列を受け取り、範囲内にあるかどうかをすべてチェックするメソッドを作成することです。

于 2013-02-18T21:58:56.720 に答える
1

複数&&の s を使用せずにそれを行うより高速な方法を次に示します (整数のみ)。

private static boolean isInRange(int num, int min, int max) {
    return (num - min - Integer.MIN_VALUE) <= (max - (1 - Integer.MIN_VALUE));
}

使用法:

public static void main(String[] args) {
    System.out.println(isInRange(5,1,7)); // true
    System.out.println(isInRange(5,1,3)); // false
}
于 2013-02-18T22:05:33.113 に答える