我正在为初学者编程课程做一些小程序,在我的程序中我有两个容纳数字的变量。无论如何,我需要找出哪个数字更大并根据它打印相应的消息,例如我有:
int x = 5;
int y = 10;
我需要打印:
“y确实大于x”;
现在问题是我知道我可以使用简单的if语句,但我不允许使用它,现在它让我想知道,它甚至可能吗?如果是这样,我该怎么做?如何检查哪个数字更大而不执行以下操作:
if (x > y)
answer = true;
...
提前致谢。
答案 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
更大。((symbol x, x), (symbol y, y))
并对列表进行排序。然后将第二个符号报告为具有较大值的变量。GOTO
语句的目标。根据{{1}}或x
是否更大,执行将在代码的不同部分继续执行。或者使用上一个项目符号中的列表排序技巧来选择y
标签。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");