我有 3 个不同的对象、项目、商店和库存的 ArrayList。我正在尝试从这些列表中读取并打印一个名为inventory 的格式良好的txt 文档。我的问题是从多个 ArrayList 中读取。当我从一个列表而不是从多个列表中读取和打印时,它工作正常。我想不通。
这是我从单个列表打印时的代码。
public static void write(List<Item> items, PrintStream out) {
out.println();
out.println("Inventory Report");
out.println("----------------");
int i = 0;
for (Item item : items) {
out.format("%3d. %10s %50s %7.2f %3d%% %7.2f%n", ++i, item.getProductNumber(), item.getDescription(),
(float) (item.getPrice() / 100.0), (int) (item.getDiscount() * 100),
(float) (item.getSalePrice() / 100.0));
}
}
这是我的 txt 文档中的输出:
库存报告
- 0210919 Moto Precise Fit 后雨刮片 7.99 0% 7.99
- 83-4567-0 Easton Stealth Reflex 复合曲棍球棒 89.99 50% 44.99
- 43-0439-6 Tassimo T46 家庭酿造系统 179.99 30% 125.99
- 60-3823-0 Yardworks 4 吨原木分离器 399.99 0% 399.99
现在,要从 3 ArrayList 打印,我使用了相同的模式和 3 个循环:
public static void write(List items, List stores, List stock, PrintStream out) {
out.println();
out.println("Inventory Report");
out.println("----------------");
int i = 0;
for (Item item : items) {
for (Store store : stores) {
for (Stock stock : stocks) {
out.format("%3d. %10s %50s %7.2f %3d%% %7.2f %5s %20s %4d %7.2%n", ++i, item.getProductNumber(), item.getDescription(),
(float) (item.getRetailPrice() / 100.0), (int) (item.getDiscount() * 100),
(float) (item.getSalePrice() / 100.0), store.getStoreID(), store.getDescription(),
stock.getItemCount(), item.getRetailPrice() * stock.getItemCount());
}
}
}
}
}
但我的输出什么也没给我:
库存报告
任何人都知道为什么它不打印任何东西?我真的不明白为什么。谢谢
编辑:
我的列表来自我读过的 3 个 txt 文档,也许那里是错误的,但我不明白为什么它适用于一个但不适用于另一个。这是我的代码:
public static List<?> read(File file) throws ApplicationException {
Scanner scanner = null;
try {
scanner = new Scanner(file);
} catch (FileNotFoundException e) {
throw new ApplicationException(e);
}
List<Item> items = new ArrayList<Item>();
List<Store> stores = new ArrayList<Store>();
List<Stock> stocks = new ArrayList<Stock>();
try {
scanner.nextLine();
while (scanner.hasNext()) {
String row = scanner.nextLine();
String[] elements = row.split("\\|");
if (file.getName().equals("items.txt") && elements.length != 4) {
throw new ApplicationException(String.format("Expected 4 elements but got %d", elements.length));
} else if (file.getName().equals("stores.txt") && elements.length != 8) {
throw new ApplicationException(String.format("Expected 8 elements but got %d", elements.length));
} else if (file.getName().equals("stock.txt") && elements.length != 3) {
throw new ApplicationException(String.format("Expected 3 elements but got %d", elements.length));
}
try {
if (file.getName().equals("items.txt")) {
items.add(new Item(elements[0], elements[1], Integer.valueOf(elements[2]), Float
.valueOf(elements[3])));
} else if (file.getName().equals("stores.txt")) {
stores.add(new Store(elements[0], elements[1], elements[2], elements[3], elements[4],
elements[5], elements[6], elements[7]));
} else if (file.getName().equals("stock.txt")) {
stocks.add(new Stock(elements[0], elements[1], Integer.valueOf(elements[2])));
}
} catch (NumberFormatException e) {
throw new ApplicationException(e);
}
}
LOG.info("Input file successfully parsed.");
} finally {
if (scanner != null) {
scanner.close();
}
}
LOG.info("List of Input created");
return items;
}
以及我从中读取的 txt 文档:Items.txt
-描述|SKU|零售价|折扣 -Tassimo T46 家庭酿造系统|43-0439-6|17999|0.30 -Moto Precise Fit 后雨刮片|0210919|799|0.0 -Easton Stealth Reflex 复合曲棍球棒|83-4567- 0|8999|0.5 - Yardworks 4 吨原木分离器|60-3823-0|39999|0
商店.txt
-ID|描述|街道|城市|省|邮政编码|商店电话|汽车服务-BC001|GRANDVIEW & BENTALL|2830 Bentall Street|温哥华|BC|V5M 4H4|604-431-3570|604-431-3572 -BC002 |本拿比南部| 7200 市场路口|本拿比|BC|V5J 0A2|604-451-5888|604-451-5888
股票.txt
-商店 ID|商品 SKU|商品计数 -BC001|43-0439-6|25 -BC001|60-3823-0|63 -BC001|83-4567-0|15 -BC001|0210919-0|2 -BC002| 43-0439-6|12 -BC002|60-3823-0|47 -BC002|83-4567-0|32 -BC002|0210919-0|0