【发布时间】:2021-03-03 04:54:08
【问题描述】:
所以这是我的主要课程,我基本上是在尝试从 txt 文件中读取项目列表,并尝试将它们存储在多个对象的数组列表中,但由于某种原因,如果我尝试拥有,我会不断收到 inputmissmatch 错误txt 文件中有多行和多个对象,但是假设我有一个包含一行的 txt 并且我将一个对象添加到列表中,它工作得非常好
public static void main(String[] args) throws FileNotFoundException, IOException {
// FileReader fr = new FileReader("Item2.txt");
Scanner file = new Scanner(new File("item.txt"));
ArrayList<Item> List = new ArrayList<Item>();
List.add(new ClothingItem(file.next().charAt(0), file.next(), file.next(), file.nextInt(), file.next(), file.nextDouble(), file.nextInt()));
List.add(new ClothingItem(file.next().charAt(0), file.next(), file.next(), file.nextInt(), file.next(), file.nextDouble(), file.nextInt()));
List.add(new Computer(file.nextInt(), file.next(), file.nextDouble(), file.nextInt(), file.next(), file.next(), file.next(), file.nextDouble(), file.nextDouble()));
List.add(new FoodItem(file.nextDouble(), file.next(), file.nextInt(), file.next(), file.nextDouble(), file.nextInt()));
List.add(new FoodItem(file.nextDouble(), file.next(), file.nextInt(), file.next(), file.nextDouble(), file.nextInt()));
List.add(new Beverages(file.nextInt(), file.next(), file.nextInt(), file.next(), file.nextDouble(), file.nextInt()));
ClothingItem[] list1 = List.toArray(new ClothingItem[List.size()]);
ClothingItem[] list2 = List.toArray(new ClothingItem[List.size()]);
Computer[] list3 = List.toArray(new Computer[List.size()]);
FoodItem[] list4 = List.toArray(new FoodItem[List.size()]);
FoodItem[] list5 = List.toArray(new FoodItem[List.size()]);
Beverages[] list6 = List.toArray(new Beverages[List.size()]);
for (Item A : List) {
System.out.println(A);
}
}
}
正在尝试读取的文件
M RED MALE 1001 Shirt 19.0 100
L BLACK FEMALE 1002 Shoes 49.0 25
1003 Thinkpad 1050.0 2 Samsung i710610U SMEF 8.0 512.0
5.0 NotFresh 1004 GreenPeas 3.0 117
5.0 Fresh 1005 Lettuce 2.0 90
1006 NotAlcholic 1981 Cola 3.0 50
【问题讨论】:
-
你的文件总是一样的吗?如果你想这样做,你的文件每次都必须具有相同的格式。另外你为什么使用
Scanner?这种类型的任务有更好的选择 -
您可以为要放入的对象添加代码吗? IE 项目、服装项目、计算机、食品项目、饮料?另外,文件中的每一行是否代表它自己的对象?您是否尝试读取文件的每一行,将其作为对象处理,然后读取下一行?我很困惑你到底想做什么..
-
您应该逐行读取文件,将每一行拆分为标记并将该行转换为对象。乍一看,该文件包含 6 行,但代码尝试创建 7 个对象,只有 1 个计算机条目。另一个大问题是您不检查文件的结尾(只有一个
hasNext用于大量next/nextInt/nextDouble) -
这能回答你的问题吗? Scanner is skipping nextLine() after using next() or nextFoo()? 这是所呈现代码 sn-p 中多个错误的另一个来源。
-
@cheshire,我可以创建不同的 txt 文件,但是,并非所有类都具有相同的属性,例如计算机有 9 个属性,而服装项目有 7 个,不用说两者都有完全不同的类型