为什么从文件中读取并将详细信息存储在类中会提供垃圾值



以下是我用来从文件中读取的代码,并将其中的详细信息保存在两个类IphoneIpadArrayList中,但显然出现了问题。

我得到的这个代码的输出是:

Iphone@28d93b30和ipads.get(0)的IndexOutOfBoundException

try {
fScanner = new Scanner(new File("apple.txt"));
} 
catch (FileNotFoundException e) {
System.out.println(e.toString());
}
ArrayList<Iphone> iphones = new ArrayList<>();
ArrayList<Ipad> ipads = new ArrayList<>();
while(fScanner.hasNextLine()) {
String line = fScanner.nextLine();
Scanner lineScanner = new Scanner(line);
if(lineScanner.next().equals("IPHONE")) {
String model = "IPHONE"+lineScanner.useDelimiter(",").next();
String scrSze = lineScanner.useDelimiter(",").next();
String proc = lineScanner.useDelimiter(",").next();
String simT = lineScanner.useDelimiter(",").next();
String clr = lineScanner.useDelimiter(",").next();
String rom = lineScanner.useDelimiter(",").next();
String is3dtouch = lineScanner.useDelimiter(",").next();
String pric = lineScanner.useDelimiter(",").next();
iphones.add(new Iphone(model,scrSze,proc,simT,clr,rom,is3dtouch,pric)); 
}

else if(lineScanner.next().equals("IPAD")) {
String model = "IPAD"+lineScanner.useDelimiter(",").next();
String scrSze = lineScanner.useDelimiter(",").next();
String proc = lineScanner.useDelimiter(",").next();
String iswifi = lineScanner.useDelimiter(",").next();
String clr = lineScanner.useDelimiter(",").next();
String memo = lineScanner.useDelimiter(",").next();
String pric = lineScanner.useDelimiter(",").next();
ipads.add(new Ipad(model,scrSze,proc,iswifi,clr,memo,pric));
}
}
System.out.println(iphones.get(2)+"n");
System.out.println(ipads.get(0)+"n");

文件如下:

IPHONE 7, 4.7, A10, GSM, JET BLACK, 32GB, TRUE, 700
IPAD AIR 2, 9.7, A8, TRUE, SILVER, 64GB, 400
IPHONE SE, 4, A9, CDMA, SILVER, 16GB, FALSE, 490
IPAD PRO, 9.7, A9, TRUE, SPACE GREY, 32GB, 650
IPHONE X, 7, A11, LTE, BLACK, 128GB, TRUE, 999
IPAD PRO X, 12, A12, TRUE, SPACE GREY, 256GB, 700

如果能对上述问题作出一个好的解释,我将不胜感激。

您得到Iphone@28d93b30是因为您正在打印Iphone,并且您没有覆盖Iphone类中的toString()方法,这意味着默认的Object.toString()方法正在执行。

你得到了一个例外,因为你正试图获得列表中的第一个Ipad,但列表中没有任何Ipad。没有,因为您调用next()两次(一次在第一个if条件下,一次在第二个else if条件下,所以您与"IPAD"比较的令牌是行中的第二个,而不是第一个。

相关内容

最新更新