2017-03-16 98 views
0

有人可以對代碼中的第二個分隔符有什麼不對嗎?當我運行的代碼,並單獨的數字用逗號或空格和它的作品完美的罰款逗號,但是當我試圖用一個空格運行它,我得到這個錯誤:作爲分隔符的空格連接

Exception in thread "main" java.util.InputMismatchException 
    at java.util.Scanner.throwFor(Unknown Source) 
    at java.util.Scanner.next(Unknown Source) 
    at java.util.Scanner.nextInt(Unknown Source) 
    at java.util.Scanner.nextInt(Unknown Source) 
    at main.Mean.main(Mean.java:28) 

我的代碼:

package main; 

import java.util.Scanner; 

public class Mean { 
    @SuppressWarnings("resource") 
    public static void main (String [] args){ 
     // Console prompts use to enter their numbers 
     System.out.println("Please Enter your Numbers: "); 

     // Creating a String of numbers that will be stored in the 'nums' variable 
     Scanner nums = new Scanner(System.in); 

     // Making 'input' equal to the 
     String input = nums.nextLine(); 

     // Now the scanner class scans the string that was put into the variable 'input'. 
     Scanner scan = new Scanner(input); 

     scan.useDelimiter(",");    // Any commas are now a delimiter 
     scan.useDelimiter("\\s*");   // Any combination of concatenated of whitespace is now a delimiter 
     scan.useDelimiter("\\s*,\\s*");  // Any combination of concatenated of whitespace followed by a single comma followed by any number of concatenated whitespace is now a delimeter 

     double total = 0.0;     // Initializing the variable total and setting it equal to 0.0 
     double counter = 0.0;    // Initializing the variable counter and setting it equal to 0.0 

     while(scan.hasNextLine()){   // While the variable 'scan' still has integers left... 
      total += scan.nextInt();  // Make the total equal to the old total plus the new presented integer 
      counter++;      // Add one to the 'counter' variable to keep track of the total amount of numbers 

      //System.out.println("Total: "+total);  Commented out code that was used for testing 
      //System.out.println("Counter: "+counter); Commented out code that was used for testing 
     } 
     scan.close();      // Closes the scanner 

     double mean = total/counter;  // Mean is equal to the total divided by the amount of numbers 
     System.out.println(); 
     System.out.println("Average: " + mean); 
    } 
} 
+0

它工作得很好,因爲你只是用過去的模式進入。 – 2017-03-16 01:57:05

回答

1

分隔符不疊加起來。只有最後一個被認爲是你應該使用一個單一的模式,如:

scan.useDelimiter("\\s*,\\s*|\\s*|,"); 

編輯

這應該工作太:

scan.useDelimiter("\\s*,\\s*|\\s*"); 
0

例外情況說明自己。請務必參閱的API文檔:

https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#nextInt()

public int nextInt()

Scans the next token of the input as an int. An invocation of this method of the form nextInt() behaves in exactly the same way as the invocation nextInt(radix), where radix is the default radix of this scanner.

Returns: the int scanned from the input

Throws:

InputMismatchException - if the next token does not match the Integer > regular expression, or is out of range

NoSuchElementException - if input is exhausted

IllegalStateException - if this scanner is closed

相關問題