Java 当我将随机生成的值放入数组时,为什么它们是相同的?
为什么随机生成的值在数组中是相同的 在调试模式下查看时,我看到Java 当我将随机生成的值放入数组时,为什么它们是相同的?,java,arrays,random,Java,Arrays,Random,为什么随机生成的值在数组中是相同的 在调试模式下查看时,我看到ArrayList中的值是相同的 谁能解释一下吗 public class CreateRandomSet { public static void main(String[] args) throws IOException { Map<String, ArrayList<String>> randomSet = new HashMap<String, ArrayList<
ArrayList
中的值是相同的
谁能解释一下吗
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();
}
}
}
公共类CreateRandomSet{
公共静态void main(字符串[]args)引发IOException{
Map randomSet=新的HashMap();
ArrayList storeData=新的ArrayList();
字符串fileName=“file.txt”;
FileReader FileReader=新的FileReader(文件名);
BufferedReader bf=新的BufferedReader(文件读取器);
String line=bf.readLine();
字符串存储ID;
字符串storeName;
串客户;
字符串值;
随机=新随机();
双随机值;
双启动=100;
双端=10000;
while(行!=null){
storeData.clear();
line=line.trim();
CsvTokenizer CsvTokenizer=新的CsvTokenizer(行“,”);
storeId=csvTokenizer.nextToken();
if(csvTokenizer.hasMoreTokens()){
storeName=csvTokenizer.nextToken();
storeData.add(storeName);
}
if(csvTokenizer.hasMoreTokens()){
value=csvTokenizer.nextToken();
randomValue=end+(start*random.nextDouble());
添加(String.valueOf(randomValue));
}
randomSet.put(storeId、storeData);
line=bf.readLine();
}
}
}
您只有一个storeData
实例,可以将其用作地图所有键的值。因此,在最终迭代中添加到该列表中的值就是您看到的地图所有关键点的值
您必须在循环的每个迭代中创建一个新的列表
更改:
storeData.clear();
致:
storeData=newarraylist();
但是为什么clear()
根本不清除数组?我希望在使用clear()
方法后,我的数组将为空。@Andrew当然会清除列表。但是地图中的所有值都引用同一个ArrayList对象,因此它会清除所有值。并且您在上一次迭代中添加的值不会被清除。
storeData = new ArrayList<>();