我正在进行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;
}