Member 14843380 Ответов: 1

Почему ошибка приходит как индекс из связанного исключения, когда I=1 и меньше, чем равно n.


Тогда как при i=0 и меньше, чем равно n-1 ошибка не возникает.

импорт java.io-да.*;
импорт java.util.Сканер;
класс String2
{
статический int temp=0;
общественная статический недействительным гласные()
{
Scanner scan=новый сканер(System.in);
System.out.println("введите количество человек :");
инт Н=сканировать.nextInt();
int a[]=новый int[n];
System.out.println("введите вес людей :");
for(int i=1;i<=n;i++)//java.lang.ArrayIndexOutOfBoundsException
{
а[я]=сканировать.nextInt();
}
for(int i=0;i=n-2;i++)
{
for(int j=i+1;j<=n-1;j++)
{
если(a[i]<a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=температура;
}
System.out.println("вес людей в порядке убывания равен:");
for(int=0;k<=n-1;k++)
{
System.out.print(a[k]+",");
}
}
публичный статический пустота главный(строка[]аргументы)
{
Гласные();
}
}

Что я уже пробовал:

Приведенный выше код-это то, что я пробовал

1 Ответов

Рейтинг:
10

OriginalGriff

Потому что индексы массива для массива с N элементами работают от 0 до N - 1.
Таким образом, трехэлементный массив будет иметь три допустимых индекса:

int arr[] = new int[3];
arr[0] = 0;
arr[1] = 1;
arr[2] = 2;
Любое другое значение индекса недопустимо.
Ваш цикл выполняется от 1 до N включительно:
for(int i = 1; i <= n; i++)
   {
   a[i]=scan.nextInt();
   }
Таким образом, если N равно 3, он использует
a[1] = ...
a[2] = ...
a[3] = ...
а итоговый показатель находится за пределами допустимого диапазона.
Измените свой цикл, и он будет работать:
for(int i = 0; i < n; i++)
   {
   a[i]=scan.nextInt();
   }


OriginalGriff

В "современных" языках (и Java) индексы массивов всегда начинаются с нуля, индекс 1 всегда является вторым элементом.
Есть старые языки, которые начинали индексы с 1, но их лучше всего отправить в мусорную корзину истории ... :смеяться: