2016-05-08 3 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

не следует, чтобы второе утверждение было «else if»? Потому что если они оба, то тогда они могут вернуть оба, но если вы сделаете еще, если он будет делать только правильный. –

+0

A функция возврат ** один ** справка и делает ** сразу **. –

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(); 
    } 
} 

Я не уверен, если это делает его более легким, но определенно делает его более динамичным, упрощает добавление/удаление диапазонов во время выполнения.

Смежные вопросы