所以这是我第一次在这里发帖。我试图从文件中读取数据,从该数据创建多个对象,然后将创建的对象放入ArrayList。但每次我尝试过,我只会得到同一个对象的多个副本,而不是不同的对象。我在我的智慧结束。
无论如何,这里是从文件中读取数据的方法的代码。在此先感谢您的帮助!
public void openShop() throws IOException{
System.out.println("What is the name of the shop?");
shopName = keyboard.nextLine();
setShopFile();
File openShop = new File(shopFile);
if (openShop.isFile()){
Scanner shopData = new Scanner(openShop);
shopName = shopData.nextLine();
shopOwner = shopData.nextLine();
while (shopData.hasNextLine()){
shopItem.setName(shopData.nextLine());
shopItem.setPrice(Double.parseDouble(shopData.nextLine()));
shopItem.setVintage(Boolean.parseBoolean(shopData.nextLine()));
shopItem.setNumberAvailable(Integer.parseInt(shopData.nextLine()));
shopItem.setSellerName(shopData.nextLine());
shopInventory.add(shopItem);
}
setNumberOfItems();
}
else
System.out.println("That shop does not exist. Please try to open" +
"the shop again.");
isSaved = true;
}
答案 0 :(得分:3)
正确的方式:
while (shopData.hasNextLine()){
shopItem = new ShopItem(); //This will create a new Object of type ShopItem
shopItem.setName(shopData.nextLine());
shopItem.setPrice(Double.parseDouble(shopData.nextLine()));
shopItem.setVintage(Boolean.parseBoolean(shopData.nextLine()));
shopItem.setNumberAvailable(Integer.parseInt(shopData.nextLine()));
shopItem.setSellerName(shopData.nextLine());
shopInventory.add(shopItem);
}
答案 1 :(得分:1)
我无法看到你在哪里创建shopItem实例。
但是如果你每次都没有创建一个新的ShopItem,那么每次你绕过循环你只是更新一个实例,然后将它添加到shopInventory。
答案 2 :(得分:1)
使用完全相同的对象填充ArrayList。您应该创建ShopItem
的新实例:
while (shopData.hasNextLine()){
ShopItem shopItem = new ShopItem();
shopItem.setName(shopData.nextLine());
...
}