2016-11-01 92 views
0

我嘗試運行我的工作時出現問題。 我必須通過控制檯輸入一些數字,它應該按照升序排列並保存到數組中。 我認爲hasNext方法和String.nextLine()方法很好,但它似乎仍然處於循環中。 感謝您的幫助使用掃描儀循環hasNext()

import java.util.Scanner; 

public class OrdinamentoMaggiore{ 
    public static void main(String[] args){ 
     Scanner sc = new Scanner(System.in); 
     System.out.println("Digita dei numeri e te li mettero' in ordine crescente: "); 
     String Numeri = sc.nextLine(); 
     int dimArray = 0; 
     while (sc.hasNext(Numeri)){ 
      dimArray++; 
      System.out.println("Dimensione array: " + dimArray); 
     } 
     int min = 0, max = 0, temp; 
     int[] mioArray = new int[dimArray]; 
     for (int i = 0; i <= mioArray.length; i++){ 
      mioArray[i] = Integer.parseInt(sc.next(Numeri)); 
     }  
     for (int j = 0; j <= mioArray.length; j++){ 
      for (int h = 1; h <= mioArray.length; h++){ 
       if (mioArray[j] < mioArray[h]){ 
        continue; 
       } 
       else { 
        temp = mioArray[j]; 
        mioArray[j] = mioArray[h]; 
        mioArray[h] = temp; 
       } 
      } 
     } 
     System.out.println("Min: " + mioArray[0]); 
     System.out.println("Max: " + mioArray[dimArray]); 
     sc.close(); 
    } 
} 
+0

爲什麼不只是輪詢,直到你點擊一個非數字字符,然後處理所有的輸入? – user123

+0

例如: 輸入:12 32 1 2 3 stop while(sc.hasNextInt(Numeri))?? – Alberto32

+0

http://stackoverflow.com/a/9592624/1327636這應該有幫助! – user123

回答

1

的問題是,你正在閱讀輸入的第一行到變量Numeri。然後,您在Numeri上調用hasNext,這不符合您的想法。如果下一個標記從 指定字符串構造的模式匹配

返回true:Scanner.hasNext被定義爲here

所以它使用Numeri中的字符串作爲它需要匹配的模式。絕對不是你想要的。

我會建議名單,做這樣的事情:

List<Integer> numberList = new ArrayList<>(); 
    while (sc.hasNextInt()) { 
     numberList.add(sc.nextInt()); 
    } 
    Collections.sort(numberList); 

名單是好的,因爲你沒有明確地告訴它的大小。這可以避免你的第一個循環。現在,循環繼續從System.in讀取,直到遇到不是整數的東西並將它們添加到列表中。

最後,它使用Collections.sort對列表進行排序。那有多漂亮?您的整個程序可以在幾行內複製。絕對要嘗試學習可用的庫和函數。它可以爲您節省大量時間和精力。如果您有任何問題,請告訴我。