2012-06-10 13 views
5

Czasami piszemy niepotrzebny kod. Moje pytanie jest dość proste: czy istnieje metoda podobna do poniższej?Funkcja zakresu (min., Maks., Wartość) w Javie

/** @return true if a given value is inside the range. */ 
public static boolean range(min, max, value) 

Nie znalazłem tego w Google. Czy to dlatego, że nie istnieje?

+4

Nie nazwij go 'rangeCheck()', Oracle pozwie Cię. –

Odpowiedz

3

Można by stworzyć wpisane Range klasę, która ma metodę within:

public class Range<T extends Comparable<T>> { 

    private final T min; 
    private final T max; 

    public Range(T min, T max) { 
     this.min = min; 
     this.max = max; 
    } 

    public boolean within(T value) { 
     return min.compareTo(value) <= 0 && max.compareTo(value) >= 0; 
    } 
} 

Jeśli min i max były takie same dla grupy testów, można ponownie użyć obiektu range dla wszystkich testów.

FWIW, wydaje się to dość przydatne!

+0

Jak '> =' i '<=' działają z porównywalnymi? –

+0

@OdDeCirkel Dzięki za pobranie tego. Właśnie wpisałem to bez IDE i bez myślenia! Naprawiono teraz - Pozdrawiam – Bohemian

2

um ...

value >= min && value <= max 

pewno jeśli naprawdę potrzebujemy funkcji do których można łatwo napisać go samodzielnie?

+2

Z drugiej strony istnieje 'Math.abs()' i jest jeszcze prostszym impulsem – Bohemian

+0

wartość> = min && wartość <= max jest tym, co zawsze używam ... To dlatego, że zamierzam go użyć lubię: 35 razy ... i byłoby denerwujące, aby zrobić to dla każdego zdania ... Dzięki! –

+0

@Ivan Seidel: ma 29 znaków. Wywołanie funkcji miałoby 23. Założę się, że są daleko, znacznie większe kłopoty, na które możesz poświęcić swój czas. –

2

Nie istnieje.

A „sensowny” miejsce dla niego byłoby w module Math, ale ponieważ jest to po prostu wyrażona w wyrażeniu

min < value && value < max 

wydaje się trochę wygórowana.

+0

Wiem, że to proste, ponieważ Math.abs() jest proste, ale lepsze niż (val <0? Val * -1: val) –

+0

No cóż, "abs" jest metodą Java z matematycznym odpowiednikiem. Ponadto zwraca liczbę całkowitą. 'range' to test boolowski, który zwraca wartość true lub false i nie ma prawdziwego odpowiednika matematycznego. Rzeczywiście, w sytuacji rzeczywistej, test, że wartość mieści się w pewnym zakresie liczbowym, prawdopodobnie miałby bardziej użyteczną nazwę z dziedziny problemu, na przykład 'isAValidChoice (min, max, value)' ... w rzeczy samej 'min' a 'max' będzie prawdopodobnie polami należącymi do dowolnej klasy pod warunkiem użycia metody' isAValidChoice'. – Dancrumb

Powiązane problemy