Java 极端算术溢出错误背后的含义
我是Java新手,我想知道在下面的实现中可以做些什么,这样我就不会面临上述问题中的错误 编码问题可在此处找到==> 我的解决办法如下:Java 极端算术溢出错误背后的含义,java,Java,我是Java新手,我想知道在下面的实现中可以做些什么,这样我就不会面临上述问题中的错误 编码问题可在此处找到==> 我的解决办法如下: //您也可以使用导入,例如: //导入java.util.*; //您可以出于调试目的写入stdout,例如。 //System.out.println(“这是一条调试消息”); 导入java.util.ArrayList; 导入java.util.Collections; 导入java.util.List; 类解决方案{ 公共int解决方案(int[]A){
//您也可以使用导入,例如:
//导入java.util.*;
//您可以出于调试目的写入stdout,例如。
//System.out.println(“这是一条调试消息”);
导入java.util.ArrayList;
导入java.util.Collections;
导入java.util.List;
类解决方案{
公共int解决方案(int[]A){
//用JavaSE8编写代码
布尔isTriangle=false;
List myTriangleList=新建ArrayList();
对于(int i:A){
我的三角形列表。添加(i);
}
Collections.sort(myTriangleList);
for(int i=0;i myTriangleList.get(i+2)){
isTriangle=true;
中断;}
}
if(isTriangle)
返回1;
其他的
返回0;
}
}
但是我得到了以下错误
此代码为%93例如,如果您测试的3个数字都是整数。MAX_VALUE,则它们表示一个有效的三角形。但是,您的
myTriangleList.get(i)+myTriangleList.get(i+1)>myTriangleList.get(i+2)
测试将返回false
,因为由于数字溢出,前两个数字相加将得到负和
您可以检查总和是否为负数,在这种情况下,接受3个数字作为三角形:
if (myTriangleList.get(i) > 0 &&
myTriangleList.get(i+1) > 0 &&
myTriangleList.get(i+2) > 0 &&
(myTriangleList.get(i) + myTriangleList.get(i+1) > myTriangleList.get(i+2) ||
myTriangleList.get(i) + myTriangleList.get(i+1) < 0)) {
isTriangle = true;
break;
}
<代码>if(myTriangleList.get(i)>0&&
MyTriangalList.get(i+1)>0&&
MyTriangalList.get(i+2)>0&&
(myTriangleList.get(i)+myTriangleList.get(i+1)>myTriangleList.get(i+2)||
myTriangleList.get(i)+myTriangleList.get(i+1)<0)){
isTriangle=true;
打破
}
编辑:添加了处理负数的条件。但在这种情况下,类似[-2,-2,-2]的数组也将返回1,这使tests@BurakhanAksoy好的,如果输入可以包含负值,你必须添加另一个测试-如果3个数字中的任何一个是负值,这是一个无效的三元组。