Java 为什么这段代码会抛出运行时错误?
给定一个随机整数数组和一个数字x。查找并打印数组中的三元组,这些元素的总和为x。 打印三元组时,先打印最小的元素。 也就是说,如果有效的三元组是(6,5,10),则打印“5 6 10”。在第1行必须打印的5个三元组中,没有任何限制。您可以按任何顺序打印三元组,只是要注意三元组中元素的顺序Java 为什么这段代码会抛出运行时错误?,java,arrays,java-runtime-compiler,Java,Arrays,Java Runtime Compiler,给定一个随机整数数组和一个数字x。查找并打印数组中的三元组,这些元素的总和为x。 打印三元组时,先打印最小的元素。 也就是说,如果有效的三元组是(6,5,10),则打印“5 6 10”。在第1行必须打印的5个三元组中,没有任何限制。您可以按任何顺序打印三元组,只是要注意三元组中元素的顺序 import java.util.Arrays; public class TripletSum { public static void FindTriplet(int[] arr, int
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+"");
}
}
}
}
导入java.util.array;
公共类三元组和{
公共静态void FindTriplet(int[]arr,int x){
/*您的类应命名为TripletSum。
*不要写main()。
*不读取输入,它作为函数参数传递。
*打印输出,不返回。
*自动处理输入。
*/
数组。排序(arr);
int b=0,c=0;
对于(int a=0;a您必须仅在arr.length-2之前进行初始化。当a=arr.length-1
时,则c=arr.length+2
这是异常的原因
for(int a=0; a<arr.length-2; 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+"");
}
}
for(int a=0;a您正在迭代数组的整个长度。
当您在第二次到最后一次迭代时,这将中断。
当循环indeaxa
是arr.length-2
时,循环中的代码将尝试将c
定义为b+1
,它等于a+2
。现在a
是arr.length-2
,因此c
将等于arr.length
,这是比数组本身更大的索引(数组的最高索引是其长度减1。arrayIndexofBoundException由于arr[c]c=a+2,最大值为arr.length-1当询问代码抛出错误时,请将该错误添加到问题中。除了编译错误之外,您使用的逻辑可能重复。您应该使用其他算法,因为这会给出错误的结果,除非您要查找的元素是连续的如果从aal中更正代码,则最后缺少}