2016-09-30 5 views
0

ich eine m*n Matrix zum Beispiel lesen mag:Wie jede Zeile von ganzen Zahlen lesen separat

2 1 5; 
3 1 3 1; 
1 2; 

Ich möchte alle die Nummer notieren, zum Beispiel jetzt die Zahlen markiert werden, sind 1, 2, 3, 5

Da ich sicherstellen muss, dass die Eingabe von row = m, möchte ich jede Zeile separat lesen.

Hier ist mein Code, aber es liest die ganze Zahl in der gleichen Liste, so kann ich nicht sicher, dass es nur m Reihe sind:

Scanner sc = new Scanner (System.in); 
List<Integer> list = new ArrayList<Integer>();      
while (sc.hasNextInt()) 
    list.add(sc.nextInt()); 
+0

Sie können Ihre Liste nach dem Lesen der Eingabe in n Zeilen mit je m Elementen aufteilen. Andernfalls sollten Sie Ihre Datenstruktur von der Liste in etwas anderes ändern. – mazaneicha

Antwort

0

Bevor die Zahlen Parsen, könnten Sie zunächst jede Zeile extrahieren basierend auf dem Separator:

Scanner lineScanner = 
      new Scanner(System.in) 
      .useDelimiter(";"); 

Dann lesen jede Zeile in eine eigene Array:

List<List<Integer>> lines = new ArrayList<>(); 

while(lineScanner.hasNext()) { 
    List<Integer> newLine = new ArrayList<>(); 
    Scanner rawLine = new Scanner(lineScanner.next()); 
    while(rawLine.hasNextInt()) { 
     newLine.add(rawLine.nextInt()); 
    } 
    lines.add(newLine); 
} 

Mit Ihrer Eingabe System.out.println(lines) ergibt:

[[2, 1, 5], [3, 1, 3, 1], [1, 2]] 

Von dort können Sie dann leicht überprüfen, was Sie auf einer Pro-Line-Basis wollen.

+0

Hi @Shashtick wissen Sie, wie man den Scanner vom Lesen der Eingabe stoppt und den Ausgang druckt? – Pelican

+0

'Ctrl-D' funktioniert für mich. Alternativ könntest du zuerst etwas wie "String input = new Scanner (System.in) .nextLine()." Machen und "input" anstelle von System.in oben verwenden. Dadurch werden die Dinge zum Laufen gebracht, sobald Sie nach dem Schreiben der Zeile die Eingabetaste drücken. – Shastick

Verwandte Themen