webentwicklung-frage-antwort-db.com.de

Wie prüfe ich, ob eine ganze Zahl in einem bestimmten Bereich liegt?

Ich hoffe auf etwas eleganter als

if (i>0 && i<100) 
50
herpderp

Sie können Abstand hinzufügen;)

if (i > 0 && i < 100) 
150
Jakub Hampl

Meiner Ansicht nach 

if (0 < i && i < 100) 

ist eleganter. Sieht aus wie Mathegleichung. 

Wenn Sie nach etwas Besonderem suchen, können Sie versuchen:

Math.max(0, i) == Math.min(i, 100)

zumindest verwendet es eine Bibliothek.

22
Vitaly

Für diejenigen, die commons lang verwenden, ist die Option Range :

Range<Integer> myRange = Range.between(100, 500);
if (myRange.contains(200)){
    // do something
}

Siehe auch: Erstellen eines Apache-Commons 3.1 Range <Integer> -Objekt

17
beat

Ich sehe nicht, dass das nicht elegant ist, aber wenn Sie den Ausdruck oft wiederholen, ist es eine gute Idee, ihn in eine Methode zu setzen, z.

class MathUtil
{
   public static boolean betweenExclusive(int x, int min, int max)
   {
       return x>min && x<max;    
   }
}

Dies gilt insbesondere, wenn Sie exklusive und inklusive Vergleiche miteinander kombinieren. Der Methodenname kann Tippfehler vermeiden, z. B. die Verwendung von <wenn <= hätte verwendet werden sollen. Die Methode kann auch dafür sorgen, dass min <max usw. ist.

6
mdma

Dieser Typ machte eine Nizza Range Klasse.

Seine Verwendung wird jedoch keinen Nice-Code liefern, da es sich um eine generische Klasse handelt. Sie müssten so etwas eingeben:

if (new Range<Integer>(0, 100).contains(i))

oder (etwas besser, wenn Sie zuerst implementieren):

class IntRange extends Range<Integer>
....
if (new IntRange(0,100).contains(i))

Semantisch sind beide IMHO netter als das, was Java standardmäßig bietet, aber der Speicheraufwand, die Leistungseinbußen und das generelle Schreiben sind es wert. Persönlich mag ich mdmas Ansatz besser.

4
velis

Wenn Sie nach etwas originellerem suchen als 

if (i > 0 && i < 100)

sie können es versuchen

import static Java.lang.Integer.compare;
...
if(compare(i, 0) > compare(i, 100))
4
esin88
if ( 0 < i && i < 100)  

if ( 'a' <= c && c <= 'z' )
2
irreputable

Ich denke, es ist schon eine elegante Art, die Reichweite zu vergleichen. Bei diesem Ansatz müssen Sie jedoch zusätzliche Komponententests schreiben, um alle &&-Fälle zu erfüllen.

Sie können also eine der folgenden Methoden verwenden, um das Schreiben zusätzlicher Komponententests zu vermeiden.

Java 8 Streams verwenden:

if(IntStream.rangeClosed(0,100).boxed().collect(Collectors.toList()).contains(i))

Mathematikunterricht verwenden:

if(Math.max(0, i) == Math.min(i, 100))

Persönlich empfehle ich den zweiten Ansatz, da dadurch kein Array mit der Größe erstellt wird, die dem zu überprüfenden Bereich entspricht.

2
Sahil Chhabra

if (i <= 0 || i> = 100)

Es wird klappen. 

Verwenden Sie diesen Code:

if (lowerBound <= val && val < upperBound)
or
if (lowerBound <= val && val <= upperBound)
1
Vishal Tathe
ValueRange range = ValueRange.of(minValue, maxValue);
range.isValidIntValue(x);

es gibt true zurück, wenn minValue <= x <= MaxValue - d. h. innerhalb des Bereichs

es gibt false zurück, wenn x <minValue oder x> maxValue - d. h. outofrange

unterhalb des Programms wird geprüft, ob einer der übergebenen ganzzahligen Werte in der Methode hasTeen im Bereich von 13 (einschließlich) bis 19 (einschließlich) liegt 


import Java.time.temporal.ValueRange;    
public class TeenNumberChecker {

    public static void main(String[] args) {
        System.out.println(hasTeen(9, 99, 19));
        System.out.println(hasTeen(23, 15, 42));
        System.out.println(hasTeen(22, 23, 34));

    }


    public static boolean hasTeen(int firstNumber, int secondNumber, int thirdNumber) {

        ValueRange range = ValueRange.of(13, 19);
        System.out.println("*********Int validation Start ***********");
        System.out.println(range.isIntValue());
        System.out.println(range.isValidIntValue(firstNumber));
        System.out.println(range.isValidIntValue(secondNumber));
        System.out.println(range.isValidIntValue(thirdNumber));
        System.out.println(range.isValidValue(thirdNumber));
        System.out.println("**********Int validation End**************");

        if (range.isValidIntValue(firstNumber) || range.isValidIntValue(secondNumber) || range.isValidIntValue(thirdNumber)) {
            return true;
        } else
            return false;
    }
}

******AUSGABE******

wahr wie 19 ist Teil des Bereichs 

wahr wie 15 ist Teil des Bereichs 

false, da alle drei Werte außerhalb des Bereichs liegen 

1
Arpan Saini

Versuchen: 

if (i>0 && i<100) {} 

es wird zumindest funktionieren;)

1
Endi

Wenn Sie sich sicher sind, dass Zahlen in Zweierkomplementform gespeichert werden: 

return  ((x-low) <= (high-low));

Eine allgemeinere und sicherere Lösung wäre: 

return ((x-high)*(x-low) <= 0);
0
Guru

wenn Sie Spring-Daten verwenden, können Sie auch das Range-Objekt von Spring verwenden. 

range = new org.springframework.data.domain.Range (3, 8); range.contains (5) gibt true zurück.

0
Maurice
 Range<Long> timeRange = Range.create(model.getFrom(), model.getTo());
    if(timeRange.contains(systemtime)){
        Toast.makeText(context, "green!!", Toast.LENGTH_SHORT).show();
    }
0
VIVEK CHOUDHARY

So prüfen Sie, ob eine ganze Zahl in einem Bereich liegt. Größer als die untere Grenze, weniger als die obere Grenze. Wenn Sie versuchen, mit Subtraktion klug zu sein, werden Sie wahrscheinlich nicht das tun, was Sie wollen.

0
Borealid