[英]Ternary operator unknown behavior
我写了一个小程序,它从控制台获取 3 个数字并计算平方。
import java.util.Scanner;
public class TheatreSquare {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int m = scanner.nextInt();
int a = scanner.nextInt();
long i = n / a + n % a != 0 ? 1 : 0;
long j = m / a + m % a != 0 ? 1 : 0;
System.out.println(i);
System.out.println(j);
System.out.println((long)i*j);
}
}
我在测试过程中遇到的问题如下 - 当您输入数字时:1000000000 1000000000 1
它返回:1 1 1
虽然它应该返回 1000000000 1000000000 1000000000000000000
如果你用括号覆盖这两个三元运算符,结果将是正确的。 但它是如何影响它的呢? 据我所知,执行顺序应该是一样的,这里没有溢出。 那么为什么它会这样工作呢?
在此处检查运算符优先顺序表:三元运算符出现在最后一个位置,在 (in) 等式运算符或算术运算符之后,因此没有括号,您将首先评估n / a + n % a != 0
,然后评估result? 1: 0
result? 1: 0
,然后将其分配给您的变量。
如果这不符合您的口味,请添加括号。
即使这是您想要的,添加括号也会大大提高可读性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.