Почему этот код вызывает RuntimeError?

Дан случайный целочисленный массив и число х. Найдите и распечатайте тройки элементов в массиве, сумма которых равна x. При печати триплета сначала напечатайте наименьший элемент. То есть, если допустимый триплет равен (6, 5, 10), выведите "5 6 10". Нет никаких ограничений в том, что из 5 триплетов, которые должны быть напечатаны в 1-й строке. Вы можете печатать триплеты в любом порядке, просто следите за порядком элементов в триплете.

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+"");
       }


       }


     }
}

2 ответа

Вы перебираете всю длину массива. Это сломается, когда вы на второй и последней итерации. Когда цикл Indeax a является arr.length - 2код внутри цикла попытается определить c как b+1 который равен a+2, Сейчас a было arr.length-2 так c будет равен arr.Length который является большим индексом, чем сам массив (самый высокий индекс массива - его длина минус один).

Вы должны повторять только до 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+"");
    }
 }
Другие вопросы по тегам