0

現在、以下のようなブロックがあります。

if (number< 11 && number>= 5) {
    return 1;
} else if (number< 15 && number>= 11) {
    return 2;
} else if (number< 45 && number>= 15) {
    return 3;
}

これを行うより良い方法はありますか?

4

6 に答える 6

10

結果を計算してみてはどうですか?

return number / 5;

編集:

コメントで指摘されているように、これnumberは >= 0 の場合にのみ機能します。そうでない場合は、適切な if ステートメントを追加するだけです。

于 2013-04-30T14:47:20.170 に答える
5

あなたはいくつかの算術を試みることができます

return (int)number/5

これは、コードが行っていることを正確に行います

範囲がほぼすべての数学的パターンに従っている限り、同様のことができます

于 2013-04-30T14:47:28.967 に答える
5

2 つの配列を使用します。1 つは比較する数値を保持し、もう 1 つは答えを保持します。このアプローチの非常に単純な例を示します。

public int getResult(int number) {
    int[] results = { 1, 2, 3 };
    int[] numbers = { 5, 11, 15, 45 };
    for(int i = 0; i < numbers.length - 1; i++) {
        if (between(number, numbers[i], numbers[i+1])) {
            return results[i];
        }
    }
    //return a default value
    //return results[results.length - 1];
    return 0;
}

public boolean between(int x, int a, int b) {
    return (x >= a && x < b);
}
于 2013-04-30T14:48:08.030 に答える
1

Guavaライブラリを使用できる場合は、さまざまな if ステートメントの代わりに、範囲をチェックする簡単な方法が提供されます。これは、メソッド内のコード行の改善です。ただし、これを行うことによる 1 回限りの改善には疑問がありますが、私の意見では、読みやすくなっています。

あなたの場合、低エンドポイントと高エンドポイントを提供する方法を使用できます。あなたのロジックはのと一致しclosedOpenますRanges:{x | a <= x < b}

private int getNumber(int low, int high, int n)
{
   if (Ranges.closedOpen(low, high).contains(n))
   {
      // return the number
   }
}

ただし、返される数値を知るために if ステートメントを追加して複雑さを追加しているため、これは少し複雑です。この種の辞書があればいいのですが、あります。

が必要なようですNavigableMap。具体的には、操作を使用できますfloorKey

このfloorKey(K key)メソッドは、指定されたキー以下の最大のキーを返すために使用されますそのようなキーがない場合は null を返します。

次に例を示します。

NavigableMap<Integer,Integer> map = new TreeMap<Integer, Integer>();

map.put(0, 0);          
map.put(5, 1);
map.put(11, 2);
map.put(15, 3);
map.put(46, 0);

System.out.println(map.get(map.floorKey(6)));     // 1
System.out.println(map.get(map.floorKey(11)));    // 2
System.out.println(map.get(map.floorKey(23)));    // 3

ceilingKeylowerKeyhigherKey、および の代わりに を返す代わりの操作もあること…Entryに注意してください。…KeyMap.Entry<K,V>K

于 2013-05-01T19:32:25.600 に答える
0

@Luggiがコメントしたように、数字が5の倍数であることが確実な場合は、簡単に行うことができます

return (number - 5) / 5;
于 2013-04-30T14:47:50.813 に答える