2014-09-24 4 views
-1

Я просто хочу отсортировать массив чисел методом сортировки. Но, к сожалению, выдает ошибку:ArrayIndexOutOfBoundsException при сортировке массива

java.lang.ArrayIndexOutOfBoundsException:10 at Search.sort(Search.java:30) at Search.main(Search.java:67)

Вот мой код:

import java.util.Scanner; 

public class Search { 

    public Search() { 
    System.out.println("inside a constructer"); 
    } 

    public int[] sort(int x[]) { 

    for (int i = 0; i < x.length - 1; i++) 
     for (int j = 1; j < x.length; j++) { 
     int temp; 

     if (x[i] > x[j]) { 
      temp = x[i]; 
      x[i] = x[j]; 
      x[j] = x[i]; 

     } 

     } 
    return x; 
    } 

    public static void main(String[] args) { 
    // System.out.println("fgdg"+num); 

    int num[] = new int[10]; 

    Scanner sc = new Scanner(System.in); 

    System.out.println("Eneter the 10 integers:"); 

    for (int i = 0; i < 10; i++) { 
     System.out.println("Enter the " + (i + 1) + " number:"); 
     num[i] = sc.nextInt(); 
    } 

    System.out.println("before sorting:"); 
    for (int m = 0; m <= num.length; m++) 
     System.out.println(num[m]); 

    Search obj = new Search(); 
    int x1[] = obj.sort(num); 

    System.out.println("sorted:"); 

    for (int k = 0; k <= x1.length; k++) 
     System.out.println(x1[k]); 
    } 
} 
+0

эй приятель Itz не дублировать вопрос – rydz

ответ

1
int num[] = new int[10] 

означает, что ваш массив имеет 10 элементов (длина = 10), индексы от 0 - 9.

изменения для цикла в способе к

for (int i=0;i<x.length;i++) 
    for(int j=i+1;j<x.length;j++) 

!! Изменение каждый цикл что идет в

<= array.length 

в

< array.length 

, поскольку последний элемент массива имеет индекс array.length - 1.

У вас также есть ошибка, где вы измените значения х [I] и х [J] в функции сортировки. Оно должно быть:

if (x[i] > x[j]) { 
     temp = x[i]; 
     x[i] = x[j]; 
     x[j] = temp; 

    } 

Ваш J цикл в методе сортировки должен начинаться с + 1, а не с 1

+0

я есть внесли определенные изменения снова, не работает .. – rydz

+0

также меняет сортировку в начале и конце в главном – DeiAndrei

+0

@Rameez Я только что запустил ваш код и отредактировал свой ответ, теперь вам удастся заставить его работать. – DeiAndrei

1

Измените ваше для условия для этого:

for (int i=0;i<x.length;i++) 
    for(int j=1;j<x.length;j++){ 
     //your code 
    } 
} 

Что делает ваш код: Он проверяет каждый число в массиве, начиная с индекса 0 до размера массива.

Допустим, у вас есть array of 10 numbers. Тогда размер массива будет 10. И вы повторяете from 0 to 10. Но цифры хранятся в позиции индекса 0 to 9. Таким образом, он выкинет исключение, когда попытается извлечь 10-й элемент из массива.

+0

это не работает ... я думаю, что есть проблема в последней строке obj.sort (NUM) – rydz

1

Массив индексов начинается с нуля. Изменение

for (int i=0;i<=x.length;i++) 
    for(int j=1;j<=x.length;j++) 

в

for (int i=0;i<x.length;i++) 
    for(int j=i;j<x.length;j++) 

UPDATE:

Два более места. Изменение <= в <

for (int m = 0; m <= num.length; m++) 
     System.out.println(num[m]); 

и

for (int k = 0; k <= x1.length; k++) 
     System.out.println(x1[k]); 
+0

изменил его ... но не работает снова ... PLZ еще раз проверьте код, как я сделал некоторые изменения – rydz

+0

Кстати, ваша переменная 'temp' назначена, но не используется. Это ошибка. – ponomandr

0
for (int i=0;i<=x.length;i++) 
     for(int j=1;j<=x.length;j++) 
    { 
     int temp=0; 

     if(x[i]>x[j]) 
     { 
      temp=x[i]; 
      x[i]=x[j]; 
      x[j]=x[i]; 

     } 


    } 

Должно быть

for (int i=0;i<x.length;i++) 
     for(int j=1;j<x.length;j++) 
    { 
     int temp=0; 

     if(x[i]>x[j]) 
     { 
      temp=x[i]; 
      x[i]=x[j]; 
      x[j]=temp; 

     } 


    } 

Вы превысили размер массива!

0

изменить свой цикл для этого кода:

for (int i=0;i<x.length;i++) 
    for(int j=i;j<x.length;j++) 
Смежные вопросы