現在、以下のようなブロックがあります。
if (number< 11 && number>= 5) {
return 1;
} else if (number< 15 && number>= 11) {
return 2;
} else if (number< 45 && number>= 15) {
return 3;
}
これを行うより良い方法はありますか?
現在、以下のようなブロックがあります。
if (number< 11 && number>= 5) {
return 1;
} else if (number< 15 && number>= 11) {
return 2;
} else if (number< 45 && number>= 15) {
return 3;
}
これを行うより良い方法はありますか?
結果を計算してみてはどうですか?
return number / 5;
編集:
コメントで指摘されているように、これnumber
は >= 0 の場合にのみ機能します。そうでない場合は、適切な if ステートメントを追加するだけです。
あなたはいくつかの算術を試みることができます
return (int)number/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);
}
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
ceilingKey
、lowerKey
、higherKey
、および の代わりに を返す代わりの操作もあること…Entry
に注意してください。…Key
Map.Entry<K,V>
K
@Luggiがコメントしたように、数字が5の倍数であることが確実な場合は、簡単に行うことができます
return (number - 5) / 5;