Проверьте, если интервал между двумя числами

Почему может'т вы это, если вы пытаетесь выяснить, является ли интервал между числам:

if(10 < x < 20)

Вместо этого, вы'придется делать

if(10<x && x<20)

что кажется немного накладные расходы.

Комментарии к вопросу (9)
Решение

Одна из проблем заключается в том, что тернарный реляционных построить внесет серьезные проблемы парсера:

 ::=    |
           ... |

Когда вы пытаетесь выразить грамматика с тех производств, используя типичный ПГС, вы'll найти, что есть сдвиг-уменьшить конфликт в точке первого в <отн-ОП>. Синтаксический анализ должен впередсмотрящим произвольное количество символов, чтобы увидеть, если есть вторая в <отн-ОП> прежде чем он может решить, стоит ли бинарные или тройные форма была использована. В этом случае, вы не могли просто игнорировать конфликт, потому что это привело бы к неверному разбирает.

Я'м не говорю, что эта грамматика является смертельно неоднозначное. Но я думаю, что вы'd нужен отката парсер, чтобы правильно справиться с ней. И что представляет собой серьезную проблему для языка программирования, где быстрая компиляция является главным пунктом продажи.

Комментарии (3)

Это's просто синтаксис. '<' - это бинарная операция, и большинство языков, Дон'т сделать его переходящим. Они могли бы сделать это, как вы говорите, но потом кто-то будет спрашивать, почему вы можете'т сделать другие операции в троичной, а также. "Если (12 < х != 5) на"?

Синтаксис-это всегда компромисс между сложностью, выразительностью и понятностью. Разные дизайнеры языке делать различные выборы. Например, в SQL есть и"x между Y и Z и", где X, Y и Z могут по отдельности или всех столбцов, константы, или связанными переменными. И я'м счастлив, чтобы использовать его в SQL, и я'м счастливы одинаково не беспокоиться о том, почему это's не в Java.

Комментарии (3)

Потому что синтаксис просто не'т определяется? Кроме того, х &л; г значение типа bool, так что типа bool < инт означает? Это'т действительно накладных; кроме того, можно написать утилиту способ если вы действительно хотите - между ними(10,х,20) - я бы'т себя, но...

Комментарии (7)

Вы можете сделать свой собственный

public static boolean isBetween(int a, int b, int c) {
    return b > a ? c > a && c < b : c > b && c < a;
}

Редактировать: извините проверяет, если c лежит между A и B

Комментарии (4)

Неудобство набора текста 10 в < х && х < 20-минимален по сравнению с увеличением языковой сложности, если можно было бы разрешить10 в < х < 20`, так что разработчики языка Java решили отказаться от его поддержки.

Комментарии (0)

Коболев допускает, что (я уверен, что некоторые другие языки также). Ява унаследовала большую часть его'ы синтаксис от C, которая не'т позволю.

Комментарии (7)

Ты человек, и поэтому вы понимаете, что термин "и 10 < х < 20" и значит. Компьютер не'Т есть эта интуиция, поэтому он читает это как: на "(10 < х) < 20" по.

Например, если Х = 15, это будет рассчитать:

(10 < х) => правда

на "Правда < 20" в => ???

В программировании на C, это будет хуже, так как нет истинного\ложные ценности. Если x = 5, то расчет будет:

10 < х => 0 (значение false)

0 < 20 => не-0 число (истинно)

и поэтому на "10 &л; 5 < 20", которая будет возвращать true! :С

Комментарии (7)

Потому что в < оператор (и большинство других) являются бинарными операторами (они принимают два аргумента), и `(правда-правда) - это не допустимое логическое выражение.

В Java конструкторы язык мог создать язык, чтобы позволить синтаксис как тип вы предпочитаете, но (я'м предполагаю) они решили, что он не стоил более сложные правила разбора.

Комментарии (0)

упрощение:


a = 10; b = 15; c = 20

public static boolean check(int a, int b, int c) {
    return a
Комментарии (1)

Если (10 < х || х < 20)

Это заявление будет оценивать справедливо для чисел между 10 и 20. Это примерный эквивалент до 10 < х < 20`

Комментарии (3)