大家好!我正在学习 Java 并编写条形码扫描仪软件。
该程序被设计成当用户在控制台中输入某些命令时,相应的动作就会发生。
因此,例如,当在控制台中输入单词“仓库”时,控制台中会向用户显示商店中的产品列表。
它是这样实现的:有一个Warehouse.txt文件。它预先包含有关产品的信息,格式如下: 文章、名称、价格 -> 486414、面包、40
程序从文件中读取信息,创建类对象,Product
然后将数据写入ArrayList
. 方法代码如下:
public static void ListForToday(ArrayList<Product> products) throws IOException {
BufferedReader storageReader = new BufferedReader(new FileReader ("C:\\Users\\Home PC\\IdeaProjects\\Barcode_reader\\src\\Warehouse.txt"));
String mainLine = storageReader.readLine();
while (true){
String line = storageReader.readLine();
if (line == null) break;
String [] cells = line.split("\\s*,\\s*");
int article = Integer.parseInt(cells[0]);
String name = cells[1];
int price = Integer.parseInt(cells[2]);
products.add(new Product(article, name, price));
}
}
我们输入单词时的代码"Склад"
(位于方法中main
):
if (stringScanner.equals("Склад") || stringScanner.equals("склад")) {
System.out.println("Сегодня в продаже:");
ListForToday(today);
for (Product product : today) {
System.out.println(product);
}
}
似乎即使是这种恐怖也有效,但是!
"Склад"
如果用户再次输入该词,则ArrayList
文件中的产品将再次添加。对于每个输入也是如此。
ArrayList
第一次输入数据后,如何防止文件被写入?
我不太明白如何修复这个错误。
先感谢您!
问题是用户可以多次输入列表初始化命令,有不同的解决方法:
main
- 在循环之外为了不再添加相同的对象,您可以询问 List 正在添加的对象实例是否存在。为了比较,您只能使用“文章”字段。
老实说,我不知道在这种情况下拆箱将如何工作,但我认为它应该可以工作。最好不要将您的集合存储在列表中,而是存储在 Set 中,方法是覆盖 equals 和 hashcode 字段。