繁体   English   中英

三元运算符未知行为

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM