2016-07-11 15 views
4

Ich versuche, einige vom Benutzer eingegebene ganze Zahlen durch Leerzeichen getrennt zu sortieren.Benutzereingabe dynamisch sortieren, ohne integrierte Sortiermethoden in Java zu verwenden

Input: 4 2 1 5 9 - Erwartete Leistung: 1 2 4 5 9

I kann nicht herausfinden, wie die Schleife zu stoppen, nachdem der Benutzer drückt in der Schleife eintreten, wo i < Anzahl Mein Code funktioniert, wenn ich die ganzen Zahlen eins nach dem anderen gebe. Jede mögliche Hilfe würde geschätzt werden

class javasort { 
    public static void main(String[] args) { 
    int num, i, j, temp; 
    Scanner input = new Scanner(System.in); 

    // System.out.println("Enter the number of integers to sort:"); 
    // num = input.nextInt(); 

    num = 5; // <-- the user input should be dynamic 

    int array[] = new int[num]; 

    System.out.println("Enter integers: "); 

    for (i = 0; i < num; i++) 

     array[i] = Integer.parseInt(input.next()); 
     num = i; // make array as big as input ? 

    for (i = 0; i < (num - 1); i++) { 
     for (j = 0; j < num - i - 1; j++) { 
      if (array[j] > array[j + 1]) { 
       temp = array[j]; 
       array[j] = array[j + 1]; 
       array[j + 1] = temp; 
      } 
     } 
    } 

    System.out.println("Sorted list of integers:"); 

    for (i = 0; i < num; i++) 
     System.out.println(array[i]); 
}} 
+1

Sie fehlen ein Paar geschweifte Klammern. Der Körper Ihrer ersten Schleife besteht aus einer einzigen Anweisung. Hinweis: Verwenden Sie für "if" -Anweisungen und Schleifenkörper IMMER geschweifte Klammern. –

+0

Wenn das die beabsichtigte Schleife ist, dann ist es verdächtig. Wenn 'num = i;', dann 'i == num', so ist 'i

+0

Wenn Sie beabsichtigen, die Größe des Arrays jedes Mal zu ändern, wenn Sie eine neue Zahl "finden", dann wird das nur durch Ändern von "num" nicht erreicht. –

Antwort

6

Ihr Code war sehr fast richtig, und dann entfernten Sie den besten Hinweis, den Sie hatten. Verwenden Sie Scanner.nextInt() wie

num = input.nextInt();   // <-- get the count. 
int array[] = new int[num]; 
System.out.println("Enter integers: "); 
for (i = 0; i < num; i++) {  // <-- don't rely on indentation for flow control. 
    array[i] = input.nextInt(); // <-- get a number "num" times. 
} 
+0

ich verstehe. Aber ich möchte, dass der Ein- und Ausgang wie folgt aussieht. Eingabe: 4 2 1 5 9 - Erwarteter Ausgang: 1 2 4 5 9, statt nach jeder Zahl die Eingabetaste drücken zu müssen. – user3765848

+0

Die erste Eingabe muss Ihre Anzahl von Zahlen sein. Also, 5 4 2 1 5 9 sollte es tun. –

+0

Ja, ich weiß. Aber ich suche nach einem dynamischen Array. Der Benutzer sollte nicht angeben müssen, welche Länge er eingeben muss. Dieser Fix funktioniert nicht auf 5 4 oder 55 77 11 – user3765848

0

So einfach und doch so effizient:

Arrays.sort(array); 
+0

Ich kann Arrays.sort nicht verwenden. Das ist, was ich meinte, ohne eingebaute Bibliotheken – user3765848

+0

rate was: Scanner, System und Integer sind eingebaute Bibliotheken – FisheyLP

0

Sie den Bubble sort Algorithmus verwenden können. Es läuft o (n^2) im schlimmsten Fall. Musste den Code hier nicht setzen, du kannst es tun. Es dauert nur weniger als 20 Zeilen.