2016-07-29 30 views
0

Ich versuche, die Eingabe und fügen Sie sie in einer Arraylist, mit BufferedReader. Der Code nimmt endlose Eingaben und geht nicht zu weiteren Zeilen weiter (nicht aus der for-Schleife). finden Sie meinen Code unten:Eingang für Arraylist mit readline() von BufferedReader

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); 

} 
} 

I n2 als Anzahl von Elementen in der Array-Liste genommen haben. wenn Eingang n2 = 5; Die readLine nimmt die Texteingabe endlos auf, ohne sie zu beenden, nachdem 5 Strings zur Arraylist hinzugefügt wurden. Es kommt nicht aus der for-Schleife. Bitte helfen Sie mir, den Fehler zu verstehen, den ich hier mache.

Antwort

0

Es geht eigentlich nicht ewig, der Zeichencode für eine Null ist 48, eins ist 49, zwei ist 50, und so weiter. Wenn Sie also eine 5 eingeben, liest der Computer seinen Zeichenwert und speichert n2 als 53, und geben Sie 52 Eingaben ein. warum 52 statt 53? Nun, es gibt einen zweiten Fehler, br.read() schaut nur auf das erste Byte der Eingabe, also ein Zeichen. Beim ersten Aufruf von br.readLine() wird das gelesen, was auf der Leitung nach der ersten eingegebenen Nummer stand. um diese Probleme zu beheben, ändern Sie einfach

int n2 = br.read(); 

zu

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

und voila! erledigt! P.S. Vielleicht möchten Sie die Integer.parseInt() in einem try catch-Block umgeben, falls der Benutzer etwas außer einer Zahl eingibt.

+0

Ohh das habe ich vermisst. Ja, richtig. Vielen Dank. – sagnikDas