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

Why is reading from file and storing details in classes providing garbage values?

以下是我用来读取文件并将其详细信息保存在两个 类 IphoneIpad 中的 ArrayList 中的代码,但显然有些东西这个有问题。

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

Iphone@28d93b30 and IndexOutOfBoundException for 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));

            }

        }

        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 class 中的 toString() 方法,这意味着正在执行默认的 Object.toString() 方法。

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