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

以下是我用来从文件中读取并将详细信息保存在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));


            }


        }


我很感激对上述问题的一个很好的解释。


阿晨1998
浏览 148回答 1
1回答

DIEA

你得到Iphone@28d93b30是因为你正在打印一个 Iphone,并且你没有覆盖toString()Iphone 类中的方法,这意味着Object.toString()正在执行默认方法。你得到一个例外,因为你试图获得列表中的第一个 Ipad,而列表中没有任何 Ipad。没有,因为您调用了next()两次(一次在第一个if条件下,一次在第二个else if条件下,因此您与“IPAD”比较的标记是该行的第二个,而不是第一个。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java