2016-03-21 6 views
0

Ich versuche, ein Array aus Benutzereingaben (Scanner) und dann Ausgabe sortierte Array vom größten Mitglied zu den niedrigsten, aber es geht outofbounds Ich weiß nicht wieso, hier ist die Quelle :Java: ArrayIndexOutOfBoundsException [indexOutOfBoundsExeption]

import java.util.Scanner; 
public class U{ 
public static void main(String[] args){ 
    Scanner sc = new Scanner(System.in); 
    System.out.print("Type array size: "); 
    int size = sc.nextInt(); 
    int[] numrat = new int[size]; 
    int[] renditur = new int[numrat.length]; 
    int numri; 
    sc.nextLine(); 
    for(int i=0;i<numrat.length;i++){ 
     System.out.print("Type a number: "); 
     numrat[i]=sc.nextInt(); 
    } 

    int index=0;  

    for(int i=0; i<renditur.length ;i++){ 
     for(int j=0; j<renditur.length ;j++){ 
      if(numrat[i] > numrat[j]){ 
       renditur[index++]=numrat[i]; 

      } 
      else{ 
       renditur[index++]=numrat[j];     
      } 

     } 
      renditur[index++]=numrat[i]; 
    } 

    //after sorting from the biggest.. 
    for(int i=0;i<renditur.length;i++){ 
     System.out.print(renditur[i] + " ");   
    } 


} 
} 

Antwort

0

im folgenden Code-Schnipsel Ihre innere Schleife läuft bis j < renditur.length Bedingung erfüllt sein wird.

Als nächstes tun Sie jetzt renditur[index++] = numrat[i];. Aber denken Sie daran, dass i ist bereits gleich der Größe von renditur - 1 und daher wird es Ihnen geben ArrayOutOfBounds Ausnahme.

for(int i = 0; i < renditur.length; i++) { 
    for(int j = 0; j < renditur.length; j++) { 
     if(numrat[i] > numrat[j]) { 
      renditur[index++]=numrat[i]; 
     } 
     else { 
      renditur[index++]=numrat[j];     
     } 

    } 
    renditur[index++]=numrat[i]; 
} 

werden Sie entweder den Zähler zurücksetzen oder Ihre Logik zu korrigieren, um nicht die folgenden, sobald Ihre innere Schleife beendet zu tun:

renditur[index++]=numrat[i]; 
0

Sie steigen bereits den Wert von i und j in für Schleifen, und wieder in den inneren Bedingungen, so dass es außerhalb der Reichweite geht.

for(int i=0; i<renditur.length ;i++){ 
    for(int j=0; j<renditur.length ;j++){ 
     if(numrat[i] > numrat[j]){ 
      renditur[index++]=numrat[i]; 

     } 
     else{ 
      renditur[index++]=numrat[j];     
     } 

    } 
     renditur[index++]=numrat[i]; 
} 
0

Am Anfang der zweiten Iteration der Schleife des jindex Variable gleich ist als die Länge von renditur (aus renditur Grenzen). Wenn Sie versuchen, als nächstes renditur[index++] zu tun, wird die Ausnahme ausgelöst, weil index aus renditur Grenzen ist. Überprüfen Sie den Algorithmus, etwas stimmt nicht.

0

Ihr Algorithmus ist falsch. Sie könnten hinzufügen

OutOfbounds Ausnahme zu vermeiden, aber es würde das Array nicht richtig sortiert sowieso.

Sie haben zwei Möglichkeiten:

a) Verwendung Arrays.sort (einfachste Möglichkeit):

Arrays.sort(numrat); // sort array 
ArrayUtils.reverse(numrat); // reverse sorted array 

b) Schreiben Sie eine Sortiermethode aus bereits verfügbaren Sortiermethoden (quicksort, Mergesort, Heapsort , bubble sort. etc) und kehren dann das Array um.

Verwandte Themen