2017-03-16 42 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

相关问题