# If-Abfrage mit mehreren Bedingungen



## qsilver89 (17. Apr 2010)

Hab eine if-Abfrage mit mehreren Bedingungen und irgendwie weiß ich nicht genau wie ich die umsetzen soll.
Also int commandInt soll,
zwischen 9 und 14 sein, oder
zwischen 19 und 23 sein, oder
zwischen 29 und 37 sein.


Das wäre meine Abfrage, aber die haut wie gesagt nicht hin...

```
if(commandInt > 9 && commandInt < 14 || commandInt > 19 && commandInt < 23 || commandInt > 29 && commandInt < 37){
}
```


----------



## mvitz (17. Apr 2010)

```
private boolean isBetween(int numberToCheck, int lowerBound, int upperBound) {
  return numberToCheck > lowerBound && numberToCheck < upperBound;
}

if (isBetween(commandInt, 9, 14) || isBetween(commandInt, 19, 23) || isBetween(commandInt, 29, 37) {
...
}
```

Oder wahlweise selber die Klammern in deiner If-Bedingung setzen:


```
if((commandInt > 9 && commandInt < 14) || (commandInt > 19 && commandInt < 23) || (commandInt > 29 && commandInt < 37)){
}
```


----------



## pHL (17. Apr 2010)

Also bei mir funktioniert die Abfrage einwandfrei.


----------



## mvitz (17. Apr 2010)

pHL hat gesagt.:


> Also bei mir funktioniert die Abfrage einwandfrei.



Du hast recht 


```
package de;

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import org.junit.Test;

public class MultipleIfTest {

    private static boolean test(int commandInt) {
        return commandInt > 9 && commandInt < 14 || commandInt > 19 && commandInt < 23 || commandInt > 29
                && commandInt < 37;
    }

    @Test
    public void testname() throws Exception {
        assertFalse(test(7));
        assertTrue(test(11));
        assertFalse(test(16));
        assertTrue(test(21));
        assertFalse(test(25));
        assertTrue(test(33));
        assertFalse(test(40));
    }
}
```


----------



## Murray (17. Apr 2010)

Was genau heißt denn in diesem Fall "haut nicht hin"?
Nur mal spekuliert: üblicherweise meint man mit "zwischen 9 und 14" ja das Intervall einschließlich der Grenzen: falls das Problem jetzt ist, dass z.B. für die 9 die Bedingung nicht erfüllt ist, dann liegt daran, dass in diesem Programm die Intervallgrenzen eben nicht eingeschlossen werden - dazu müsste man anstelle von ">" und "<" ">=" bzw. "<=" verwenden.


----------



## Wortraum (17. Apr 2010)

Ich hätte es anders geschrieben, damit auf einen Blick klar ist, was die Bedingung ist:

```
boolean is10To13 = commandInt >= 10 && comandInt <= 13;
boolean is20To22 = commandInt >= 20 && comandInt <= 22;
boolean is30To36 = commandInt >= 30 && comandInt <= 36;
if(is10To13 || is20To22 || is30To36) {
    …
}
```


----------



## maki (17. Apr 2010)

^Wenn du da noch Methoden anstatt temp Variablen nimmst find ich es ok


----------

