【发布时间】:2018-07-10 09:25:40
【问题描述】:
我编写了一个小程序,它从控制台获取 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
如果你用括号覆盖这两个三元运算符,结果将是正确的。但它是如何影响它的呢?据我所知,执行顺序应该是一样的,这里没有溢出。那么为什么会这样呢?
【问题讨论】:
-
如果括号改变了结果,那么执行的顺序显然和没有的不一样。写出这样的代码不是一个聪明的主意。您可以像现在一样假设错误的执行顺序,并且代码完全不可读。不要写不好的代码。
-
你的意思是
(n/a + n%a != 0) ? 1 : 0吗?还是您的意思是n/a + (n%a != 0 ? 1 : 0)?他们显然有不同的结果。 -
我的意思是:long i = n / a + (n % a != 0 ? 1 : 0);长 j = m / a + (m % a != 0 ? 1 : 0);他们有吗?三元的优先级最低,无论如何都应该在最后时刻执行。