2012-06-10 21 views
5

Manchmal schreiben wir unnötigen Code. Meine Frage ist ziemlich einfach: Gibt es eine Methode wie die folgende?Bereich (min, max, Wert) Funktion in Java

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

Ich habe es nicht auf Google gefunden. Ist das, weil es nicht existiert?

+4

Nenne es nicht 'rangeCheck()', Oracle wird dich verklagen. –

Antwort

3

Sie könnten eine typisierte Range Klasse erstellen, die eine within Methode hat:

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

Wenn min und max das gleiche für eine Gruppe von Tests waren, können Sie Ihre range Objekt für alle Tests wiederverwenden können.

FWIW, das scheint irgendwie praktisch!

+0

Wie '> =' und '<=' mit vergleichbar arbeiten? –

+0

@OpDeCirkel Danke, dass du das aufgehoben hast. Ich habe es einfach ohne IDE und ohne nachzudenken eingegeben! Jetzt behoben - Prost – Bohemian

2

um ...

value >= min && value <= max 

sicher, wenn Sie wirklich eine Funktion dafür benötigen, können Sie es leicht selbst schreiben?

+2

Andererseits existiert 'Math.abs()', und es ist ein noch einfacheres Impl – Bohemian

+0

Wert> = Min && Wert <= Max ist was ich immer benutze ... Es ist, weil ich es benutzen werde wie: 35 mal ... und wäre nervig, es für jede Klausel zu tun ... Danke! –

+0

@Ivan Seidel: Es hat 29 Zeichen. Der Funktionsaufruf hätte 23. Ich wette, es gibt weit, weit größere Ärgernisse, auf die Sie Ihre Zeit verwenden könnten. –

2

Es existiert nicht.

A ‚vernünftig‘ Platz für sie wäre in dem Math-Modul zu sein, aber da es recht ist einfach in dem Ausdruck

min < value && value < max 

scheint es ein wenig übertrieben.

+0

Ich weiß, es ist einfach, wie Math.abs() ist einfach, aber besser als (val <0? Val * -1: val) –

+0

Nun, 'abs' ist eine Java-Methode mit einem mathematischen Äquivalent. Außerdem gibt es eine ganze Zahl zurück. 'Bereich' ist ein boolescher Test, der wahr oder falsch zurückgibt und keine echte mathematische Entsprechung hat. In einer realen Situation hätte der Test, dass ein Wert innerhalb eines numerischen Bereichs liegt, wahrscheinlich einen nützlicheren Namen aus der Problemdomäne, wie "isAValidChoice (min, max, value)" ... tatsächlich das "min" und "max" wären wahrscheinlich Felder, die zu der Klasse gehören, die die "isAValidChoice" -Methode bereitstellt. – Dancrumb