2016-11-05 4 views
1

Ich habe ein Problem. Ich versuche zu entwickeln Programm frage mich einige Zahlen ein paar Mal. Ich gebe eine Liste von Zahlen. Ich versuche sie in List> zu speichern. Zahlen können durch Leerzeichen getrennt werden. Jetzt habe ich diesen Code:Liste der Liste in für Schleifen Java

import java.util.ArrayList; 
import java.util.List; 
import java.util.Scanner; 
public class TimeSeries { 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    System.out.println("Numbers of rows:"); 
    Scanner in = new Scanner(System.in); 
    int NumberLines = in.nextInt(); 
    in.nextLine(); 
    String Ciag; 
    List<List<Integer>> ll = new ArrayList<List<Integer>>(); 
    List<Integer> list = new ArrayList<Integer>(); 
    for (int i = 0; i < NumberLines; i++) { 
     list.clear(); 
     System.out.println("Add row " +(i+1)); 
     Ciag = in.nextLine(); 
     for (int t=0; t<Ciag.length(); t++) { 

      if(Character.isWhitespace(Ciag.charAt(t))) 
      { 

      } 
      else 
      {list.add(Character.getNumericValue(Ciag.charAt(t))); 
      } 

     } 

     System.out.println(list); 
     ll.add(list); 
     } 

    System.out.println(ll); 

} 


    } 

Aber meine Ausgabe ist (Beispiel):

Numbers of rows: 
3 
Add row 1 
0 0 0 
[0, 0, 0] 
Add row 2 
1 2 3 
[1, 2, 3] 
Add row 3 
54 6 8 
[5, 4, 6, 8] 
[[5, 4, 6, 8], [5, 4, 6, 8], [5, 4, 6, 8]] 

Aber ich muss haben [[0,0, 0], [1, 2, 3], [5, 4, 6, 8]]

+0

Sie sind die 'list' Referenz Wiederverwendung, so dass Sie die gleiche' list' mehrfach hinzugefügt haben. Verwenden Sie die Referenz nicht erneut. –

Antwort

1

das Problem ist, dass Sie die gleiche list in ll mehrmals hinzufügen. Sie müssen verschiedene Listen hinzufügen, um das gewünschte Verhalten zu erhalten. Dafür müssen Sie in jeder Iteration der Schleife for eine neue Liste erstellen, anstatt die vorhandene list zu löschen und erneut zu verwenden.

ändern diese Zeilen:

List<List<Integer>> ll = new ArrayList<List<Integer>>(); 
List<Integer> list = new ArrayList<Integer>(); 
for (int i = 0; i < NumberLines; i++) { 
    list.clear(); 

Um dies:

List<List<Integer>> ll = new ArrayList<>(); 
for (int i = 0; i < NumberLines; i++) { 
    List<Integer> list = new ArrayList<>();