2017-02-27 104 views
0

我正在试图制作一个程序,需要Ints,并给我总和,我想使用正则表达式。输入包含数字,符号和字母。 例如,当我写: 的Java GiveMeSum 4 2 1 -5 或 的Java GiveMeSum 4K“2 1-5 方案应编写但它不仅给我错误的答案,也没有阅读所有!我输入我写:在java中的系统输入无法正常工作

java GiveMeSum 4 2 1 -5 
Exception in thread "main" java.util.InputMismatchException 
at java.util.Scanner.throwFor(Scanner.java:864) 
at java.util.Scanner.next(Scanner.java:1485) 
at java.util.Scanner.nextInt(Scanner.java:2117) 
at java.util.Scanner.nextInt(Scanner.java:2076) 
at GiveMeSum.main(GiveMeSum.java:12) 


public class GiveMeSum { 

public static void main(String[] args) throws IOException { 
    int sum = 0; 
    Scanner sc = new Scanner(System.in).useDelimiter("(\\D|^-)"); 
    for (int i = 0; i < args.length; i++) { 
     sum += sc.nextInt(); 
    } 
    System.out.println(sum); 
} 

}

也没有这种例外。它只是突然出现

+0

不要插入链接。发布实际文字。 – FredK

+0

你想从inputstream中读取,还是以参数? –

回答

1

发生这种情况是因为您将“4 2 1 -5”不作为输入传递,而是作为参数,因此它们会进入main方法的参数args。为了将它们作为输入等到应用程序启动和进入,或使用input stream redirection

更新

我应该怎么写它渣取输入作为参数,然后(用于参数处理代码)?有一个特定的简单方法吗?

我想说,使用非固定数量的输入参数的参数是不是很好的主意。我仍然认为使用输入流是一种方式 - 这是它的设计目的!你的解析要求也有点不礼貌。不过这里是我的尝试

public class Main 
{ 
    static OptionalInt parseOnlyInt(String s) 
    { 
     String digitsOnly = s.replaceAll("[^0-9]", ""); 
     if (digitsOnly.length() == 0) 
      return OptionalInt.empty(); 
     else 
      return OptionalInt.of(Integer.parseInt(digitsOnly)); 
    } 

    public static void main(String[] args) 
    { 
     int sum = Arrays.stream(args) 
       .map(Main::parseOnlyInt) 
       // probably in Java 9 OptionalInt::stream would be better than next 2 lines 
       // see https://bugs.openjdk.java.net/browse/JDK-8050820 
       .filter(OptionalInt::isPresent) 
       .mapToInt(OptionalInt::getAsInt) 
       .sum(); 

     System.out.println(Arrays.toString(args)); 
     System.out.println(sum);  
    } 
} 

或者,如果你喜欢这里的旧的(非Java-8)的方式,它是

public static void main(String[] args) 
{ 
    int sum = 0; 
    for (int i = 0; i < args.length; i++) 
    { 
     String digitsOnly = args[i].replaceAll("[^0-9]", ""); 
     if (digitsOnly.length() != 0) 
      sum += Integer.parseInt(digitsOnly); 
    } 
    System.out.println(Arrays.toString(args)); 
    System.out.println(sum); 
} 
+0

我应该如何在java中编写它以将输入作为参数呢?有一个特定的简单方法吗? –

+0

String [] args是参数。 args [0]应该是4,args [1]应该是2等,直到args.length。 – AlexC

0

System.in是输入流。它只在程序启动后获取数据。尝试查看主参数args。这是在调用时传入数据的地方。

0

一个简单的解决方案oneliner取参数和打印总和

public static void main(String[] args) { 
    int sum = Arrays.stream(args) // Create a stream from the array 
      .mapToInt(Integer::parseInt) // Parse the strings as integers 
      .sum(); // Sum 
    System.out.println(sum); 
}