Domanda

C'è un modo semplice per farlo

if (1 < x && x < 3) { .... }

Voglio qualcosa del genere:

if (1 < x < 3) { .... }

So che il codice sopra è sbagliato ma ....

Grazie

È stato utile?

Soluzione

Sfortunatamente, non puoi farlo in Java. Tuttavia, puoi creare una classe, ad esempio MathUtils, con un metodo isBetween, in questo modo:

public static boolean isBetween(int n, int begin, int end) {
  return n > begin && n < end;
}

Quindi, è possibile utilizzare (supponendo che import static):

if (isBetween(x, 1, 3)) {
  // ...
}

Ma questo sarebbe utile solo se hai molte condizioni range .

Altri suggerimenti

Supponendo che tu stia parlando di numeri interi:

if ( x == 2 ) { .... }

Ci sono alcuni frammenti di Java che derivano dal fatto che è un C ++ migliore - in C o C ++, c'è una conversione automatica tra valori booleani e numeri interi, quindi in C ++:

int x = 5;

std::cout << std::boolalpha;

std::cout << ( 1 < x < 3 ) << std::endl;
std::cout << ( ( 1 < x ) < 3 ) << std::endl;

stamperà " true " due volte, poiché ( 1 < x ) valuta come 1 e 1 è inferiore a 3. Java si concentra sulla correzione di questa ambiguità con l'analisi di due operatori binari rendendo i tipi booleani e interi non convertibili, quindi è necessario unirli con un altro operatore; altre lingue non provano a correggere C ++ ma hanno regole di analisi più complicate, quindi _ < _ < _ è un operatore ternario che fa la cosa giusta.

Non usare i builtin della lingua; dovresti andare con la tua prima risposta.

Diverse librerie ti permetteranno di fare qualcosa del tipo:

Range range = new ExclusiveRange(1,3);
if (range.contains(x)) { ... }

In termini di efficienza, (1 < x && x < 3) è buono come otterrai. Per inserire un numero intero in un intervallo, devi fare due confronti.

Se vuoi rendere il tuo codice più leggibile e hai molti di questi intervalli, potresti prendere in considerazione l'idea di creare una classe Interval con una funzione Includes ().

Hai la forma più semplice in termini di sintassi Java diretta. Potresti introdurre un metodo se volessi:

public static boolean isBetween(int x, int min, int max) {
    return min < x && x < max;
}

quindi chiamalo con:

if (isBetween(x, 1, 3))

ma non credo sia molto più chiaro - e ciò significa che c'è più possibilità di mettere gli argomenti nell'ordine sbagliato. La classe Range suggerita in un'altra risposta allevia questa preoccupazione, ma al prezzo di aggiungere ancora più disordine ...

L'istruzione Thate usando && è la più semplice che puoi ottenere. Java, né qualsiasi altro linguaggio in stile C che conosco, supporta le disuguaglianze concatenate.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top