2017-05-25 2 views
1

Warum sind zufällig generierte Werte im Array gleich? Wenn ich in den Debug-Modus schaue, sehe ich, dass die Werte in ArrayList<String> identisch sind.Warum sind meine generierten Zufallswerte gleich, wenn ich sie in ein Array gebe?

Kann bitte jemand erklären?

public class CreateRandomSet { 
    public static void main(String[] args) throws IOException { 
     Map<String, ArrayList<String>> randomSet = new HashMap<String, ArrayList<String>>(); 
     ArrayList<String> storeData = new ArrayList<String>(); 
     String fileName = "file.txt"; 
     FileReader fileReader = new FileReader(fileName); 
     BufferedReader bf = new BufferedReader(fileReader); 
     String line = bf.readLine(); 
     String storeId; 
     String storeName; 
     String customer; 
     String value; 
     Random random = new Random(); 
     double randomValue; 
     double start = 100; 
     double end = 10000; 
     while(line != null){ 
      storeData.clear(); 
      line = line.trim(); 
      CsvTokenizer csvTokenizer = new CsvTokenizer(line, ","); 
      storeId = csvTokenizer.nextToken(); 
      if(csvTokenizer.hasMoreTokens()){ 
       storeName = csvTokenizer.nextToken(); 
       storeData.add(storeName); 
      } 
      if(csvTokenizer.hasMoreTokens()){ 
       value= csvTokenizer.nextToken(); 
       randomValue = end + (start * random.nextDouble()) ; 
       storeData.add(String.valueOf(randomValue)); 
      } 

      randomSet.put(storeId, storeData); 
      line = bf.readLine(); 
     } 
    } 
} 

Antwort

2

Sie haben nur eine storeData Instanz, die Sie als Wert verwenden für alle Tasten Ihrer Karte. Daher sind die Werte, die zu dieser List in der letzten Iteration hinzugefügt werden, die Werte, die Sie für alle Schlüssel Ihrer Karte sehen.

Sie müssen in jeder Iteration Ihrer Schleife eine neue List erstellen.

Wechsel:

storeData.clear(); 

zu:

storeData = new ArrayList<>(); 
+0

Sehr interessant, danke. – Andrew

+0

Warum aber löscht 'clear()' das Array überhaupt nicht? Ich erwarte, dass mein Array leer sein wird, nachdem ich 'clear()' Methode verwendet habe. – Andrew

+1

@Andrew Natürlich löscht es die Liste. Alle Werte in Ihrer Map beziehen sich jedoch auf dasselbe ArrayList-Objekt, sodass alle Objekte gelöscht werden. Und die Werte, die Sie in der letzten Iteration hinzufügen, werden nicht gelöscht. – Eran

Verwandte Themen