Почему этот код вызывает 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+"");
}
}