2016-07-29 8 views
0

私は入力を取って、バッファリングされたリーダーを使用してarraylistに追加しようとしています。 コードは無限の入力を受けており、それ以上の行に進むことはありません(forループを終了しない)。私は配列リストの要素数としてN2をとっている入力の読み込みをBufferedReaderのreadline()を使用して

public class ALinput { 
     public static void main(String[] args) throws IOException { 
      BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
      int n2 = br.read();// number of items in the list 

      ArrayList<String> list2 = new ArrayList<String>(); 
      for(int i =1;i<=n2;++i) 
      { 
       list2.add(br.readLine()); 
      } 

      System.out.println(list2);//printing list before sorting 
      Collections.sort(list2);//sorting the list 
      System.out.println("After sorting "+list2); 

} 
} 

: 私の次のコードを見つけてください。入力n2 = 5の場合 ; readLineは、5文字列がarraylistに追加された後も、終了せずに無限にテキスト入力を受け付けます。 forループから出てこない。私がここでやっている間違いを理解するのを助けてください。

答えて

0

実際には永遠に進まず、ゼロの文字コードは48、1つは49、2つは50などです。だからあなたが5を入力すると、コンピュータはその文字の値を読み込み、n2を53として保存し、52の入力を入力します。なぜ53の代わりに52? よく2番目の間違いがあります。br.read()は入力の最初のバイトだけを見ます。初めてbr.readLine()が呼び出されると、入力した最初の数字の後の行にあったものがすべて読み込まれます。これらの問題を解決するために、ちょうど

int n2 = Integer.parseInt(br.readLine()); 

と出来上がりに

int n2 = br.read(); 

を変更!完了! P.P.ユーザーが数字の他に何かを入力する場合には、Integer.parseInt()をtry catchブロックで囲むことができます。

+0

ああ私はそれを逃した。うん、正しい。ありがとうございました。 – sagnikDas

関連する問題