首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的数组中的对象将变为null (java)

我的数组中的对象将变为null (java)
EN

Stack Overflow用户
提问于 2021-02-05 15:39:15
回答 2查看 47关注 0票数 0

我有一个while循环,它从文件中提取信息并创建新的对象,然后将这些对象放入一个数组中,由于某种原因,while循环为每个if语句迭代一次,然后退出,因此所有其他行都被设为null。下面是我的while循环

代码语言:javascript
复制
// open file and create array
        File file = new File("Adventures.txt");
        Scanner myReader = new Scanner(file);
        Adventure[] array = new Adventure[myReader.nextInt()];
        int i = 0;
        // reading file
        while (myReader.hasNext()) {
            if ("Zipline".equals(myReader.next())) {
                array[i] = new Zipline(myReader.nextDouble(), myReader.nextDouble());
                i++;
            }
            if ("Snorkel".equals(myReader.next())) {
                array[i] = new Snorkel(myReader.nextDouble(), myReader.nextDouble());
                i++;
            }
            if ("Helicopter".equals(myReader.next())) {
                array[i] = new Helicopter(myReader.nextDouble(), myReader.nextDouble());
                i++;
            }
        } // while loop
    ```
EN

回答 2

Stack Overflow用户

发布于 2021-02-05 15:48:58

循环的每次迭代使用了太多的值,因为每次对myReader.next()的调用都会使用另一个令牌。将令牌存储在一个变量中,以便您可以多次检查它。

代码语言:javascript
复制
while (myReader.hasNext()) {
    String token = myReader.next();
    if ("Zipline".equals(token)) {
        array[i++] = new Zipline(myReader.nextDouble(), myReader.nextDouble());
    }
    if ("Snorkel".equals(token)) {
        array[i++] = new Snorkel(myReader.nextDouble(), myReader.nextDouble());
    }
    if ("Helicopter".equals(token)) {
        array[i++] = new Helicopter(myReader.nextDouble(), myReader.nextDouble());
    }
} // while loop

或者使用switch语句:

代码语言:javascript
复制
while (myReader.hasNext()) {
    switch (myReader.next()) {
        case "Zipline":
            array[i++] = new Zipline(myReader.nextDouble(), myReader.nextDouble());
            break;
        case "Snorkel":
            array[i++] = new Snorkel(myReader.nextDouble(), myReader.nextDouble());
            break;
        case "Helicopter":
            array[i++] = new Helicopter(myReader.nextDouble(), myReader.nextDouble());
            break;
    }
} // while loop
票数 0
EN

Stack Overflow用户

发布于 2021-02-05 16:02:38

我建议你实现BuffeRedreader,它可能看起来像这样:

代码语言:javascript
复制
objReader = new BufferedReader(new FileReader("D:\Adventures.txt"));

扫描仪和BuffeRedreader的不同之处在于,缓冲区读取速度更快,给出的结果也更准确。就我个人而言,我改成了buffer,因为来自Scanner的错误不适用于Buffer。我希望我能帮上忙

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66059348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档