2014-01-28 88 views
2

我試圖通過一行輸入檢索用戶輸入:例如5,6,4,8,9使用掃描儀分隔符爲逗號。如何檢索任意數量的整數這種類型的輸入?也就是說,不需要詢問用戶他們希望輸入多少個整數。這裏是我一直在使用的代碼,但是當我希望它打破時不能有while循環中斷。請注意,我保留System.out來跟蹤程序當前正在運行的位置。一個令人困惑的部分是,我可以用這種格式獲取用戶輸入,但是程序停止並再次請求用戶輸入,那麼如果輸入是一個整數,它會要求更多輸入,直到用戶輸入更長的輸入流(至少輸入2,6 +)然後輸出字符串「調用break」,然後「while while while循環」。使用掃描儀處理用戶輸入

import java.io.IOException; 
import java.util.ArrayList; 
import java.util.Scanner; 


public class Lab1 { 

    /** 
    * @param args 
    * @throws IOException 
    * @throws NumberFormatException 
    */ 
    @SuppressWarnings("resource") 
    public static void main(String[] args) throws NumberFormatException, IOException { 
     // TODO Auto-generated method stub 
     ArrayList<Integer> numbers = new ArrayList<Integer>(); 
     int numberList; 
     Scanner scanner = new Scanner(System.in); 
     scanner.useDelimiter(","); 
     System.out.print("Enter integers: "); 

     while(scanner.hasNext())//------------------------while loop------ 
     { 
      if(scanner.hasNextInt()) 
      { 
       numberList = scanner.nextInt(); 
       numbers.add(numberList); 
       System.out.println(numbers.toString() + " " + numbers.size()); 
      } 
      else 
      { 
       System.out.println("called break"); 
       break; 
      } 
      System.out.println("Inside of while loop"); 
     }//-------------------------------------------------end of while loop------ 

     System.out.println("outside of the while loop now"); 
    } 
} 

Input: 1,2,3,4,5 
Enter integers: 1,2,3,4,5 
[1] 1 
Inside of while loop 
[1, 2] 2 
Inside of while loop 
[1, 2, 3] 3 
Inside of while loop 
[1, 2, 3, 4] 4 
Inside of while loop 

我仍然即使是5後不整和計劃正在等待更多的投入,現在如果我在末尾插入一個非整數值,我得到同樣的事情while循環中。在這兩個結果之後,一旦用戶輸入更多值(1,2),程序退出while循環併成功完成。一旦我完成使用逗號分隔符方法輸入整數,我該如何使while循環中斷?

回答

1

我建議用scanner.nextLine()讀取逗號分隔的數字作爲字符串,然後使用「,」分割字符串,然後使用Integer.parseInt()獲取數字的整數值。這樣,您可以輸入儘可能多的數字,而無需預先定義「numberCount」。

2

我知道這不回答你的問題,但它的另一種方式做打算:

這裏使用split(delimiter)方法,它會返回一個String[]陣列。然後,在for循環,使用Integer.parseInt()String秒值進行轉換成整數:

public static void main(String[] args) 
{ 
    ArrayList<Integer> numbers = new ArrayList<Integer>(); 
    int numberList; 
    Scanner scanner = new Scanner(System.in); 
    scanner.useDelimiter(","); 
    System.out.print("Enter integers: "); 
    String[] parts = scanner.nextLine().split(","); 

    // Add int's to the array 'numbers' 
    for (String s : parts) { 
     numbers.add(Integer.parseInt(s)); // Convert String to Integer 
    } 
} 
+0

示例代碼+1:P – TheLostMind

+0

這似乎工作真的很棒。我得到了零件的長度,並發現它是正確的尺寸。這是否意味着所有的「,」字符都從數組列表中刪除? – user100165

+0

是的,這是通過'split(「,」)'方法完成的。 – Christian