2016-03-28 5 views
0
public class Sort { 
    public static void main(String[] args) { 
     int i = 1; 
     Scanner input = new Scanner(System.in); 
     // prompts the user to get how many numbers need to be sorted 
     System.out.print("Please enter the number of data points: "); 
     int data = input.nextInt(); 
     // this creates the new array and data sets how large it is 
     int [] userArray = new int[data]; 
     // this clarifies that the value is above 0 or else it will not run 
     if (data < 0) { 
      System.out.println("The number should be positive. Exiting."); 
     } 
     // once a value over 0 is in, the loop will start to get in all user data 
     else { 
      System.out.println("Enter the data:"); 
     } 

     while (i <= data) { 
      int userInput = input.nextInt(); 
      userArray[i] = userInput; 
      i++; 
     } 

     // this calls the sortArray method to sort the values entered 
     sortArray(userArray); 
     // this will print the sorted array 
     System.out.println(Arrays.toString(userArray)); 
    } 
} 

Ich habe die Array-Größe gleich dem, was der Benutzer eingibt für wie viele Variablen sie eingegeben werden sortiert werden. Aus irgendeinem Grund möchte Java nur eine feste Nummer anstelle der Nummer, die vom Benutzer eingegeben wird. Gibt es eine Möglichkeit, dies zum Funktionieren zu bringen?Warum kann ein Benutzer nicht aufgefordert werden, die Array-Größe anzugeben?

+0

Was genau ist das Problem? * "Java möchte nur eine feste Nummer anstelle der Nummer, die vom Benutzer eingegeben wird" * ist schwer zu verstehen. – Gendarme

+0

Java will nichts. Und Sie können ein Array mit einer variablen Größe erstellen. BTW Es gibt keinen Grund zu überprüfen, ob die Größe nach dem Versuch, das Array zu erstellen, ungültig ist. –

+0

Arrays beginnen bei einem Index von 0 und das letzte Element ist 'data.length - 1' –

Antwort

4

Zunächst einmal gibt es ein paar Fehler in Ihrem Code. Sie überprüfen if(data < 0)nach Sie erstellen Ihr Array mit int[] userArray = new int[data];. Sie sollten es vorher überprüfen.

Darüber hinaus erhalten Sie erhalten ArrayIndexOutOfBoundsException, weil userArray[data] nicht existiert. Array-Indizes beginnen bei 0, der letzte Index ist data-1. Sie müssen Ihre While-Schleife zu while(i < data) statt while(i <= data) ändern.

Das Problem ist nicht, dass Sie data anstelle von 10 als die Länge des Arrays haben. Das Problem ist, wie ich oben sagte: Ihre While-Schleife.

0

Sie überschreiben das Array. Eine Standardmethode für die Eingabe der Daten wäre

for (int i=0; i < data; i++) { 
    userArray[i] = input.nextInt(); 
} 
1

Ihr Problem ist die While-Schleife. Da Arrays auf 0 basieren, müssen Sie nur prüfen, ob i < data. Durch sie < = Einstellung, Sie sind mehr als die Feldlänge und zum Erzeugen und ArrayIndexOutOfBoundsException

  while (i < data) { 
       int userInput = input.nextInt(); 
       userArray[i] = userInput; 
       i++; 
      } 
Verwandte Themen