2016-07-11 23 views
4

我想排列一些由空格分隔的用戶輸入整數。在Java中使用內置排序方法動態排序用戶輸入

輸入:4 2 1 5 9 - 預期輸出:1 2 4 5 9

我不能找出如何將用戶按下輸入後停止循環迴路中,其中i < NUM。當我逐個輸入整數時,我的代碼有效。任何幫助,將不勝感激

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

你缺少一對花括號。你的第一個循環的主體由一個且只有一個語句組成。建議:總是對'if'語句和循環體使用大括號。 –

+0

如果這是預期的循環,那麼它是可疑的。如果'num = i;',那麼'i == num',所以'我

+0

如果您的意圖是每次「找到」一個新號碼時都要更改數組的大小,那麼只需更改'num'就不會完成此操作。 –

回答

6

您的代碼是非常接近正確的,然後你刪除了最好的提示,你有。使用Scanner.nextInt()

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

我明白了。但我想輸入和輸出是這樣的輸入:4 2 1 5 9 - 預期輸出:1 2 4 5 9,而不必在每個數字後按回車。 – user3765848

+0

第一個輸入必須是你的數字。所以,5 4 2 1 5 9應該這樣做。 –

+0

是的,我知道。但即時通訊尋找一個動態數組。用戶不必指定需要輸入的長度。此修補程序不適用於5 4或55 77 11 – user3765848

0

如此簡單,卻又如此高效:

Arrays.sort(array); 
+0

我不能使用Arrays.sort。這就是我的意思,而不使用內置的庫 – user3765848

+0

猜測什麼:掃描儀,系統和整數是內置庫 – FisheyLP

0

可以使用Bubble sort算法。它在最壞的情況下運行o(n^2)。沒有必要把代碼放在這裏,你可以做到。它只會少於20行。