以下是我用来从文件中读取并将详细信息保存在ArrayList两个类Iphone和 中的代码Ipad,但显然这出现了问题。我为这段代码得到的输出是:Iphone@28d93b30 和 IndexOutOfBoundException 用于 ipads.get(0)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)); } }我很感激对上述问题的一个很好的解释。
1 回答

DIEA
TA贡献1820条经验 获得超3个赞
你得到Iphone@28d93b30
是因为你正在打印一个 Iphone,并且你没有覆盖toString()
Iphone 类中的方法,这意味着Object.toString()
正在执行默认方法。
你得到一个例外,因为你试图获得列表中的第一个 Ipad,而列表中没有任何 Ipad。没有,因为您调用了next()
两次(一次在第一个if
条件下,一次在第二个else if
条件下,因此您与“IPAD”比较的标记是该行的第二个,而不是第一个。
添加回答
举报
0/150
提交
取消