java为什么这段代码会抛出运行时错误?
给定一个随机整数数组和一个数字x。查找并打印数组中与x之和的元素的三元组。 打印三元组时,先打印最小的元素。 也就是说,如果有效的三元组是(6,5,10),则打印“5 6 10”。在第1行必须打印的5个三元组中,没有任何限制。您可以按任何顺序打印三元组,只是要注意三元组中元素的顺序
import java.util.Arrays;
public class TripletSum {
public static void FindTriplet(int[] arr, int x){
/* Your class should be named TripletSum.
* Don't write main().
* Don't read input, it is passed as function argument.
* Print output and don't return it.
* Taking input is handled automatically.
*/
Arrays.sort(arr);
int b=0, c=0;
for(int a=0; a<arr.length; a++){
b=a+1; c=b+1;
if((arr[a]+arr[b]+arr[c])==x){
System.out.print(a+"");
System.out.print(b+"");
System.out.print(c+"");
}
}
}
}
# 1 楼答案
你只需要把它珍藏到第二段。当
a= arr.length-1
然后c=arr.length+2
这是异常的原因# 2 楼答案
您正在迭代数组的整个长度。 当你在第二次到最后一次迭代时,这将中断。 当循环indeax
a
为arr.length - 2
时,循环中的代码将尝试将c
定义为b+1
,它等于a+2
。现在a
是arr.length-2
,所以c
将等于arr.Length
,这是一个比数组本身更大的索引(数组的最高索引是它的长度减1)