算术异常整数
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。
为什么?
x
和 y
是 int
所以 x / y
中的 /
表示整数除法。在整数除法中,20 进入 -10 零次,余数为 -10。舍去余数,结果为零的商。
解决方案:通过将 x
或 y
转换为 double
:
强制 (x / y)
在 double
算法中求值
z / ((double)x / y)
z / (x / (double)y)
现在,因为 (x / y)
是 double
,z / (x / y)
也在 double
数学中计算。在 double
数学中,x / y
== -0.5
、-40 / -0.5
== 80
当我尝试输入这个整数时出现错误 -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。
为什么?
x
和 y
是 int
所以 x / y
中的 /
表示整数除法。在整数除法中,20 进入 -10 零次,余数为 -10。舍去余数,结果为零的商。
解决方案:通过将 x
或 y
转换为 double
:
(x / y)
在 double
算法中求值
z / ((double)x / y)
z / (x / (double)y)
现在,因为 (x / y)
是 double
,z / (x / y)
也在 double
数学中计算。在 double
数学中,x / y
== -0.5
、-40 / -0.5
== 80