以下是我用來從文件中讀取并將詳細(xì)信息保存在ArrayList兩個(gè)類Iphone和 中的代碼Ipad,但顯然這出現(xiàn)了問題。我為這段代碼得到的輸出是: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)); } }我很感激對(duì)上述問題的一個(gè)很好的解釋。
1 回答

DIEA
TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超2個(gè)贊
你得到Iphone@28d93b30
是因?yàn)槟阏诖蛴∫粋€(gè) Iphone,并且你沒有覆蓋toString()
Iphone 類中的方法,這意味著Object.toString()
正在執(zhí)行默認(rèn)方法。
你得到一個(gè)例外,因?yàn)槟阍噲D獲得列表中的第一個(gè) Ipad,而列表中沒有任何 Ipad。沒有,因?yàn)槟{(diào)用了next()
兩次(一次在第一個(gè)if
條件下,一次在第二個(gè)else if
條件下,因此您與“IPAD”比較的標(biāo)記是該行的第二個(gè),而不是第一個(gè)。
添加回答
舉報(bào)
0/150
提交
取消