2017-02-27 7 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

を取るために、単純なonelinerソリューションは、リンクを投稿しないでください。実際のテキストを投稿してください。 – FredK

+0

あなたはinputstreamから読み込もうとしていますか、引数として取っていますか? –

答えて

1

これは、入力としてではなく引数として "4 2 1 -5"を渡すので、mainメソッドのargsパラメータに入ります。更新(処理の引数のコードを)アプリの開始までの入力待ちとして渡すと、それらを入力するか、input stream redirection

を使用するには

どのように私はその後、引数として入力を取るためにJavaでそれを書くべきですか?特定の簡単な方法はありますか?

私は、固定されていない入力パラメータの引数を使用するのはあまり良い考えではないと言いたいと思います。私はまだ入力ストリームを使用して行く方法です - これはそれが設計されたものです!また、あなたの解析要件は少し奇妙です。まだここに私の試み

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]はargs.lengthまで2などでなければなりません。 – AlexC

0

System.inは、入力ストリームです。プログラムの起動後にのみデータを取得します。 mainへのargsパラメータを調べてみてください。それは、呼び出し時に渡されるときにデータが置かれる場所です。

0

引数とプリント和

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); 
} 
関連する問題