算术异常整数

Arithmetic Exception integer

当我尝试输入这个整数时出现错误 -10 20 -40 << 错误 输出应该是 80

{ 
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String[] input = new String[n]; 
  for (String input1 : input) {
      input = in.readLine().split(" ");
      int x = Integer.parseInt(input[0]);
      int y = Integer.parseInt(input[1]);
      int z = Integer.parseInt(input[2]); 
      if (y - x == z - y)
      {
          System.out.println(z+ y - x);
      }
      else
      {  //-10 20 -40
          System.out.println(z / (x / y));
      }

考虑使用 double 而不是 int,因为它只能存储整数。 -10/20 变为 -0.5 但被转换为 0。您可以执行以下操作:

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    String[] input = new String[3];
    for (String input1 : input) {
        input = "-10 20 -40".split(" ");
        double x = Double.parseDouble(input[0]);
        double y = Double.parseDouble(input[1]);
        double z = Double.parseDouble(input[2]);
        if (y - x == z - y) {
            System.out.println(z + y - x);
        } else {  //-10 20 -40
            System.out.println(z / (x / y));
        }
    }
}

输出:

80.0

z / (x / y) 结果除以零。

为什么?

因为x / y == -10 / 20 == 0。

为什么?

xyint 所以 x / y 中的 / 表示整数除法。在整数除法中,20 进入 -10 零次,余数为 -10。舍去余数,结果为零的商。

解决方案:通过将 xy 转换为 double:

强制 (x / y)double 算法中求值
z / ((double)x / y)   
z / (x / (double)y)

现在,因为 (x / y)doublez / (x / y) 也在 double 数学中计算。在 double 数学中,x / y == -0.5-40 / -0.5 == 80