簡體   English   中英

為什么此代碼會引發 RuntimeError?

[英]Why does this code throws a RuntimeError?

給定一個隨機整數數組和一個數字 x。 查找並打印數組中總和為 x 的元素的三元組。 打印三元組時,首先打印最小的元素。 也就是說,如果有效的三元組是 (6, 5, 10),則打印“5 6 10”。 沒有限制必須在第一行打印 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+"");
       }


       }


     }
}

你必須迭代直到 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+"");
    }
 }

您正在遍歷數組的整個長度。 當您進行倒數第二次迭代時,這將中斷。 當循環 indeax aarr.length - 2 ,循環內的代碼將嘗試將c定義為b+1 ,它等於a+2 現在aarr.length-2所以c將等於arr.Length這是一個比數組本身更大的索引(數組的最高索引是它的長度減一。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM