Java 检查三元组是否为三角形?
我的这个解决方案有1次测试失败。Java 检查三元组是否为三角形?,java,Java,我的这个解决方案有1次测试失败。 导入java.util.array; 类解决方案{ 公共int解决方案(int[]A){ //用JavaSE8编写代码 如果(A.length=0&&A[i]>A[i+2]-A[i+1]){ 返回1; } /* *我们已经知道一个[i+1]当使用两个值时,您的代码会失败,这两个值的总和大于一个整数可以指定的最大值 在行中,如果(A[i]+A[i+1]>A[i+2])您正在进行加法。如果超过整数限制,您将遇到整数溢出 另一个代码通过从不做这样的加法来避免这种情况
导入java.util.array;
类解决方案{
公共int解决方案(int[]A){
//用JavaSE8编写代码
如果(A.length=0&&A[i]>A[i+2]-A[i+1]){
返回1;
}
/*
*我们已经知道一个[i+1]当使用两个值时,您的代码会失败,这两个值的总和大于一个整数可以指定的最大值
在行中,如果(A[i]+A[i+1]>A[i+2])
您正在进行加法。如果超过整数限制,您将遇到整数溢出
另一个代码通过从不做这样的加法来避免这种情况。如果使用的两个值加在一起大于一个整数可以指定的最大值,则代码将失败
在行中,如果(A[i]+A[i+1]>A[i+2])
您正在进行加法。如果超过整数限制,您将遇到整数溢出
另一个代码通过从不做这样的加法来避免这种情况。不等式规则:
它表示:三角形的一条边的长度小于其他两条边的长度之和,大于其他两条边的长度之差
如果我们通过侧面a+b>c
如果A[I]+A[I+1]
之和大于int
的容量,则它成为溢出的情况,并且A[I]+A[I+1]<0
=>A[I]+A[I+1]的结果不大于A[I+2]
这里if(A[i]+A[i+1]>A[i+2])
在发生溢出时返回false
因此,更好地使用
if (A[i + 2] >= 0 && A[i + 2] > A[i + 1] - A[i])
or
if (A[i] >= 0 && A[i] > A[i+2] - A[i+1])
不平等规则:
它表示:三角形的一条边的长度小于其他两条边的长度之和,大于其他两条边的长度之差
如果我们通过侧面a+b>c
如果A[I]+A[I+1]
之和大于int
的容量,则它成为溢出的情况,并且A[I]+A[I+1]<0
=>A[I]+A[I+1]的结果不大于A[I+2]
这里if(A[i]+A[i+1]>A[i+2])
在发生溢出时返回false
因此,更好地使用
if (A[i + 2] >= 0 && A[i + 2] > A[i + 1] - A[i])
or
if (A[i] >= 0 && A[i] > A[i+2] - A[i+1])
请查看失败的测试用例,并调试两种解决方案,以查看差异。@luk2302它没有显示失败测试用例的详细信息。它只是说extreme\u arith\u overflow1 overflow test,3 MAXINTsyes,你认为3 MAXINTs可能指的是什么?@luk2302 dunno。问题在于for循环中的if条件。iv尝试了if(a[i]>=0&&a[i]+A[i+1]>A[i+2])这也不是100%,这很奇怪。请看一看失败的测试用例并调试两个解决方案,看看它们之间的区别。@luk2302它没有显示失败测试用例的详细信息。它只是说极限溢出1溢出测试,3个最大值,你认为3个最大值可能指什么?@luk2302 dunno。问题在于if条件在for循环中,如果(A[i]>=0&&A[i]+A[i+1]>A[i+2])这也不是100%,这很奇怪,“你会遇到未定义的行为”-这在技术上是不正确的,它是定义的行为,意外但定义良好。感谢帮助;我通过(长)A[i]+A[i+1]>(长)A[i+2]修复了它谢谢你指出它。我把它改为简单的“整数溢出”,这应该更准确。“你会遇到未定义的行为”-这在技术上是不正确的,它是定义的行为,出乎意料但定义良好。谢谢你的帮助;我用(长)A[I]+A[I+1]>(长)A[I+2]修复了它谢谢你指出luk2302。我把它改为简单的“整数溢出”,这应该更准确。
if (A[i + 2] >= 0 && A[i + 2] > A[i + 1] - A[i])
or
if (A[i] >= 0 && A[i] > A[i+2] - A[i+1])