Можно ли узнать, какое число больше без использования оператора if? - PullRequest
2 голосов
/ 12 ноября 2011

Я делаю небольшую программу для курса программирования для начинающих, и в моей программе есть 2 переменные, которые содержат числа.В любом случае мне нужно выяснить, какое число больше, и напечатать соответствующее сообщение в соответствии с ним, например, у меня есть:

int x = 5;
int y = 10;

Мне нужно напечатать:

"это правда, что убольше чем x ";

Теперь я знаю, что могу использовать простое выражение if, но мне не разрешено его использовать, и теперь меня удивляет, возможно ли это?Если так, как я могу это сделать?Как я могу проверить, какое число больше, БЕЗ выполнения чего-то вроде:

if (x > y) 
    answer = true;

...

Заранее спасибо.

Ответы [ 8 ]

8 голосов
/ 12 ноября 2011

Ну, вы можете сделать:

boolean answer = x > y;

Выражение x > y является просто выражением типа boolean. В то время как boolean выражения часто используются для условий в if операторах, циклах и т. Д., Они не должны быть - простое присваивание тоже работает хорошо.

Звучит так, будто вы хотите обратного:

boolean answer = y > x;

Затем вы можете использовать значение answer, чтобы построить строку для отображения ...

5 голосов
/ 12 ноября 2011

Используйте троичный оператор:

System.out.println(x > y ? "It is true that x is greater than y" : "");
4 голосов
/ 12 ноября 2011

троичный оператор "?:"

String output = (x > y)? "x is greater than y":"y is greater than x"; 
2 голосов
/ 12 ноября 2011

Будет работать троичный условный оператор, который упоминали другие. Предполагая, что вы ищете творческие способы сделать это, а не практические, вот другой метод:

int x = 5;
int y = 10;
while(y > x){
  System.out.println("It is true that y is bigger than x.");
  return;
}
System.out.println("It is false that y is bigger than x.");

while просто действует как причудливый if, потому что return означает, что в противном случае бесконечный цикл будет выполняться не более одного раза.

Вот еще один пример, который вместо этого основан на логической оценке короткого замыкания:

public static void main(String...args){
  int x = 5;
  int y = 10;
  boolean answer = (y > x);
  boolean testTrue = answer && printTrue();
  boolean testFalse = testTrue || printFalse();
}

private static boolean printFalse() {
  System.out.println("It is false that y is bigger than x.");
  return true;
}

private static boolean printTrue() {
  System.out.println("It is true that y is bigger than x.");
  return true;
}

Конечно, вы не должны делать это в реальном производственном коде, но может быть интересно подумать о неортодоксальных способах кодирования чего-либо, и это может быть полезно для изучения языка.

1 голос
/ 09 января 2014

(a + b) / 2 + Abs (ab) / 2 - большее число.

1 голос
/ 12 ноября 2011

Вы можете использовать рекурсию (но я бы не рекомендовал ее)

public int compare ( int a , int b )
{
    switch ( a )
    {
          case Integer.MIN_VALUE :
              switch ( b )
              {
                 case Integer.MIN_VALUE :
                    return 0 ;
                 default :
                    return -1 ;
              }
           default :
              switch ( b )
              {
                  case INteger.Min_VALUE :
                      return 1 ;
                  default :
                      return compare ( a-1 , b-1 ) ;
               }

    }
}
1 голос
/ 12 ноября 2011

Ваш вопрос помечен как Java, но вы не указываете Java в своем вопросе.В Java есть несколько способов получить один и тот же результат, который включает в себя тестирование логического выражения x > y, например, троичного оператора.Я бы посчитал их эквивалентными явному выражению if.

Другие возможности:

  • Вычислить квадратный корень из x - y.Это вызовет исключение, если y больше.Перехватите исключение в вызывающем абоненте и сообщите, что y - большее количество.Если исключений нет, сообщите, что x больше.
  • В LISP, Ruby или другом языке, который поддерживает тип символа, сформируйте список ((symbol x, x), (symbol y, y)) и отсортируйте список.Затем сообщите второй символ как переменную с большим значением.
  • Если вы используете ассемблер, BASIC, PL / 1 и т. Д., Вы можете использовать арифметическое выражение для выбора цели оператора GOTO.В зависимости от того, будет ли x или y больше, выполнение возобновится в другой части кода.Или используйте трюк сортировки списка в предыдущем пункте, чтобы выбрать метку GOTO.
  • В общем случае выражение ((x - y) / abs(x - y) + 1) / 2 будет выдавать 1, если x больше, и 0, если y больше.Этот результат можно использовать для выбора данных, функции и т. Д. Из списка двух альтернатив, что приводит к условному поведению без оператора if.
0 голосов
/ 12 ноября 2011

Я знаю, что в некоторых языках вы можете использовать оценку короткого замыкания для построения ответа.

Выражение (A && B) всегда оценивается как B, если A истинно.Если A ложно, то B никогда не оценивается.Аналогично (A || B) оценивается как B, если A ложно.Если A истинно, B никогда не вычисляется.

Хотя я не уверен на 100% в Java, вы хотите получить следующее выражение:

String output = ((x > y) && "it is true that X is greater than Y") 
  || (((x < y) && "it is true that X is less than Y")
  || "it is true that X is equal to Y");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...