是否有可能在不使用if语句的情况下找出哪个数字更大?

时间:2011-11-11 20:03:11

标签: java if-statement

我正在为初学者编程课程做一些小程序,在我的程序中我有两个容纳数字的变量。无论如何,我需要找出哪个数字更大并根据它打印相应的消息,例如我有:

int x = 5;
int y = 10;

我需要打印:

“y确实大于x”;

现在问题是我知道我可以使用简单的if语句,但我不允许使用它,现在它让我想知道,它甚至可能吗?如果是这样,我该怎么做?如何检查哪个数字更大而不执行以下操作:

if (x > y) 
    answer = true;

...

提前致谢。

8 个答案:

答案 0 :(得分:7)

你可以做到:

boolean answer = x > y;

表达式x > y只是boolean类型的表达式。虽然boolean表达式经常用于if语句,循环等中的条件,但它们不一定是 - 简单的赋值也可以正常工作。

听起来你想反过来:

boolean answer = y > x;

然后你可以使用answer的值来构建要显示的字符串......

答案 1 :(得分:5)

使用三元运算符:

System.out.println(x > y ? "It is true that x is greater than y" : "");

答案 2 :(得分:4)

三元运算符“?:”

String output = (x > y)? "x is greater than y":"y is greater than x"; 

答案 3 :(得分:2)

其他人提到的三元条件运算符将起作用。假设您正在寻找创造性的方法而不是实际的方法,这是另一种方法:

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;
}

当然,你不应该在真正的生产代码中这样做,但想到非正统的编码方式会很有趣,这对探索语言很有帮助。

答案 4 :(得分:1)

您的问题被标记为Java,但您没有在问题中指定Java。在Java中,有多种方法可以获得相同的结果,包括以某种方式测试布尔表达式x > y,例如三元运算符。我认为这些等同于明确的if语句。

其他可能性:

  • 计算x - y的平方根。如果y更大,这将引发异常。在调用者中捕获异常并报告y数量较大。如果没有例外,请报告x更大。
  • 在LISP,Ruby或支持符号类型的其他语言中,形成列表((symbol x, x), (symbol y, y))并对列表进行排序。然后将第二个符号报告为具有较大值的变量。
  • 如果使用assembly,BASIC,PL / 1等,您可以使用算术表达式来选择GOTO语句的目标。根据{{​​1}}或x是否更大,执行将在代码的不同部分继续执行。或者使用上一个项目符号中的列表排序技巧来选择y标签。
  • 通常,如果x更大,则表达式GOTO将产生1,如果y更大则表达式0。此结果可用于从两个备选项列表中选择数据,函数等,从而生成没有((x - y) / abs(x - y) + 1) / 2语句的条件行为。

答案 5 :(得分:1)

你可以使用递归(但我不推荐它)

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 ) ;
               }

    }
}

答案 6 :(得分:1)

(a + b)/ 2 + Abs(a-b)/ 2是更大的数字。

答案 7 :(得分:0)

我知道在某些语言中你可以使用短路评估来构建答案。

如果A为真,则表达式(A && B)始终求值为B.如果A为假,则从不评估B. 类似地,如果A为假,则(A || B)将评估为B.如果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");