2016-05-08 4 views
0

私は現在、多くの整数範囲を必要とする何か(練習のために、私は初心者です)に取り組んでいます。しかし、私は条件文の範囲を作成するためのより高速な方法がなければならないように、私はちょうどこれがへの最速の方法です想像できない感じ条件文の範囲をより迅速に検証する方法は?

else if (age >= 2 && age <=3){ 
    System.out.println("You're a toddler!"); 

:今、それはちょうど、このようにそれを行うには、基本的には常識でしたそれをやる。そうでなければ、大丈夫です。もっと速い方法があれば、このやり方をやり続けたいと思うだけです。ありがとう。

+0

これは方法です。 – Idos

+1

これらがすべての離散値をマップする連結範囲である場合、単一の比較を使用できます。 ( 'age <2'、' age <= 3' ...) –

答えて

0

後で比較スキップする手段として、あなたはそれらの順序を制御することにより、単一の比較を使用して、関数から値を返すことができる範囲全体をカバーする値をマッピングしている場合:しかし

public String ageDescription(short age){ 
    if (age < 2){ 
     return "less than 2"; 
    } 

    if (age <= 3){ 
     // we know age >= 2 since we didn't return 
     return "more than 2 but less than or equal to 3"; 
    } 
    // no comparison for last value 
    return "You're older than 3"; 
} 

を、道あなたはすぐにそれをやっている、完璧にいいです。

+0

誰かがおそらくこれが悪い考えだと思っているか、それを理解していないと思うので、いずれにせよ、彼はコメントを残さないかどうかわからない。 –

+0

2番目のステートメントは "else if"であってはなりませんか?両方の場合は両方を返すことができますが、それ以外の場合は正しいものだけを返すことになるからです。 –

+0

関数は** one **参照を返し、**すぐに**行います。 –

0

あなたは、たとえば、このためのクラスを作成することができます。

public class Range{ 
    int min; 
    int max; 
    String msg; 
    public Range(int min, int max, String msg){ 
     this.min = min; 
     this.max = max; 
     this.msg = msg; 
    } 
    public boolean isInRange(int val){ 
     return val >= min && val <= max; 
    } 

    public void showMessage(){ 
     System.out.println(msg); 
    } 
} 

をして、これはあなたがそれを使用する方法である。

Range range1 = new Range(2,3,"You're a toddler!"); 
Range range2 = new Range(4,8,"...."); 
Range range3 = new Range(9,12,"...."); 
List<Range> ranges = new ArrayList<>(Arrays.asList(range1,range2,range3)); 
int val = ...; 
for(Range range:ranges){ 
    if(range.isInRange(val)){ 
     range.showMessage(); 
    } 
} 

私は、これはそれを簡単にするのかはわからないが、それ間違いなくより動的になり、実行時に範囲を追加/削除することが容易になります。