2016-05-06 10 views
-1

STDからの入力を受け取り、コンソールに出力しようとしています。以下はプログラムです。私は3つの数字だけを印刷しようとしています。しかし、私の入力は3つ以上の数字を取っています私はここで間違って何ですか?scanner.next()はJavaでどのように動作しますか

public static void main(String[] args) { 
     String reg= "^-?(\\d+)$"; 
      int b[]= new int[3]; 
     Scanner sc=new Scanner(System.in); 
     for(int i=0;i<3;i++){ 
      if(sc.next().matches(reg)){ 
       b[i]= Integer.parseInt(sc.next()); 
      } 

     } 
     System.out.println(Arrays.toString(b)); 
     for(int c=0;c<b.length;c++){ 
      System.out.println(b[c]); 
     } 

    } 

output: 
------------------ 
20 
30 
40 
50 
60 
70 
[30, 50, 70] 
30 
50 
70 
+0

'if(sc.next()。matches(reg)){'はどうするのですか? – piyushj

+1

あなたは6つの数字を読んでいます。毎回2回ループしています。あなたのifチェックで3、そしてparseIntで3つ – azurefrog

+0

私の意図は。ユーザーが数字以外を入力した場合。それらをスキップします。 sc.next()。matches(reg)を追加したのは数字だけです。 – shreekanth

答えて

0

next()に電話するたびに次の入力に移動します。あなたがチェックしてから保存したい場合は、変数にそれを保持する必要があります。

for(int i=0;i<3;i++){ 
     String input = sc.next(); 
     if(input.matches(reg)){ 
      b[i]= Integer.parseInt(input); 
     } 
    } 
0

固定私の迅速なチェックアウト:

public static void main(String[] args) { 
     String reg= "^-?(\\d+)$"; 
      int b[]= new int[3]; 
     Scanner sc=new Scanner(System.in); 
     for(int i=0;i<3;i++){ 
      String tmp = sc.next(); 
      if(tmp.matches(reg)){ 
       b[i]= Integer.parseInt(tmp); 
      }else{ 
      i--; 
      } 

     } 
     System.out.println(Arrays.toString(b)); 
     for(int c=0;c<b.length;c++){ 
      System.out.println(b[c]); 
     } 

    } 
0

は一時変数へのご入力を割り当てます。次に、プログラムを再コンパイルします。 これが役立つことを願っています!

関連する問題