Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么这段代码会抛出运行时错误?_Java_Arrays_Java Runtime Compiler - Fatal编程技术网

Java 为什么这段代码会抛出运行时错误?

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

给定一个随机整数数组和一个数字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+"");
       }


       }


     }
}
导入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您正在迭代数组的整个长度。
当您在第二次到最后一次迭代时,这将中断。

当循环indeax
a
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中更正代码,则最后缺少
}