1

Тема: Допоможіть знайти помилку в коді

public class my_arr 
{
   public static void main(String[] args)
   {
       int[]arr;
       arr=new int[] {5, 7, 3, 9, 4, 1, 6};
       int n=arr.length;
       int i;
       System.out.print("масив до сортування: ");
       for ( i=0; i<n; i++)
       {
           System.out.print(arr[i]+" ");
       }
       for (int j=1; j<n; j++ )
       { 
           for( i=0;i<n-j; i++)
           {
             if( arr[i]>arr[i+i])
             {
                 int z=arr[i];
                 arr[i]=arr[i+1];
                 arr[i+1]=z;  
             }
           } 
       }
       System.out.print("масив після сортування: ");
       for ( i=0; i<n; i++)
       {
           System.out.print(arr[i]+" ");
       }
   }   
}

виводить помилку Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8
    at my_arr.main(my_arr.java:18)
поясніть, будь ласка, мені чому, а то я новачок і не можу зрозуміти.

2 Востаннє редагувалося koala (03.03.2015 23:13:55)

Re: Допоможіть знайти помилку в коді

Дайте відповіді на три питання:
- які індекси масивів (ArrayIndex на початку назви винятка) використовуються в 18 рядку?
- які значення можуть набути ці індекси при виконанні програми?
- які коректні значення індексів?
Якщо відповіді на питання 2 і 3 ще не зробили відповідь на ваше питання очевидним, то вже й не знаю, як підказати...

Ну і правила перечитайте, особливо п. 3.6.

Подякували: Tinca1

3 Востаннє редагувалося P.Y. (03.03.2015 23:17:47)

Re: Допоможіть знайти помилку в коді

Підозрюю, в 18 рядку (який згадується в повідомленні про помилку) мало бути

             if( arr[i]>arr[i+j])

Але, оскільки там arr[i+i], в якийсь момент індекс виходить за межі масиву.

4

Re: Допоможіть знайти помилку в коді

koala написав:

Дайте відповіді на три питання:
- які індекси масивів (ArrayIndex на початку назви винятка) використовуються в 18 рядку?
- які значення можуть набути ці індекси при виконанні програми?
- які коректні значення індексів?
Якщо відповіді на питання 2 і 3 ще не зробили відповідь на ваше питання очевидним, то вже й не знаю, як підказати...

Ну і правила перечитайте, особливо п. 3.6.

але мене заклинило, після першого питання я зрозуміла, вибачте)) дуже дякую))

5 Востаннє редагувалося Tinca (03.03.2015 23:17:22)

Re: Допоможіть знайти помилку в коді

P.Y. написав:

Підозрюю, в 18 рядку (який згадується в повідомленні про помилку) мало бути

             if( arr[i]>arr[i+j])
if( arr[i]>arr[i+1])

має бути