使用带有ArrayList的构造函数向ArrayList添加新对象



我正在进行java-programing.mooc.fi PART 7 Recipe搜索的最后一个ex(4部分(。我几乎完成了,但当我启动对象Recetas的实例时出现了问题。由于某种原因,每个实例都是可以的;ingredientes";它被所有实例中的新数据覆盖。请在下面找到代码,并提前感谢您的帮助!!

问题就在这里:

public ArrayList<ReceiptAdmin> FileToRecetas(){
ArrayList <String> ingredientes = new ArrayList<>();
int i = 1;
String nombreReceta = "";
int tiempo = 0;
for (String data : fileToArray){
if (data.equals("")){
//System.out.println(ingredientes);
recetas.add(new ReceiptAdmin(nombreReceta, tiempo, ingredientes));
//System.out.println(recetas);
i = 1;
ingredientes.clear();
continue;
}   
if (i==1){
nombreReceta = data;
}
if (i==2){
tiempo = Integer.valueOf(data);                              
} 
if (i > 2){
ingredientes.add(data);         
}
i++;
}
//System.out.println(ingredientes);
//System.out.println(ingredientes);
this.recetas.add(new ReceiptAdmin(nombreReceta, tiempo, ingredientes));
//System.out.println(recetas);
return recetas;
} 

测试的输出是:

煎饼面团,烹饪时间:60[豆腐、米饭、水、胡萝卜、黄瓜、鳄梨、芥末],

肉丸,烹饪时间:20[豆腐,米饭,水,胡萝卜,黄瓜,鳄梨,芥末],

豆腐卷,烹饪时间:30[豆腐、米饭、水、胡萝卜、黄瓜、鳄梨、芥末]

所有的豆腐原料!!

用户界面.javahttps://pastebin.com/twvXv04j

recipes.txthttps://pastebin.com/Nwz1RJa7

RecipeAdmin.javahttps://pastebin.com/1TEYssgS

RecipeSearch.javahttps://pastebin.com/4MbsGeYz

ArrayList <String> ingredientes = new ArrayList<>();

需要在每个循环中你不能只是清除列表然后重新开始,你必须制作一个新列表

最简单的修复方法是用ingredientes = new ArrayList<>();替换ingredientes.clear()

问题是您重写了相同的ArrayList。要解决这个问题,您需要每次使用新的ArrayList对象重新初始化配料引用变量。

如下所示重新编译代码

if (data.equals("")){

recetas.add(new ReceiptAdmin(nombreReceta, tiempo, ingredientes));
i = 1;
ArrayList <String> ingredientes = new ArrayList<>();//Change ingredients.clear() to re initializing a new list with new ArrayList<>().
continue;
}   

最新更新