将文件中的对象添加到程序中

时间:2018-09-21 17:01:03

标签: java java.util.scanner infinite-loop

我正在编写一个游戏,在该程序中,我需要根据文件添加新的敌人。现在,我的问题是,当尝试读取此文件时,我遇到了一个无限的while循环。我是编程的新手,所以我不确定如何解决此问题。这是问题代码。文件中条目外观的一个示例是:“ Troll,6,4,1”。谢谢您的帮助。

    try {
        Scanner input = new Scanner(new File(filename));

        while(input.hasNext());
        {
            input.useDelimiter(",|\n");
            String name = input.next();
            int strength = input.nextInt();
            int speed = input.nextInt();
            int numVials = input.nextInt();
            Enemy newEnemy = new Enemy(name, strength, speed, numVials);
            opponents.add(newEnemy);
            input.close();
        }

    } catch (FileNotFoundException e) 
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

3 个答案:

答案 0 :(得分:1)

input.hasNext()不会将指针移到下一行。

第一次调用hasNext()后,如果不从文件中读取,hasNext()将始终返回true。因为输入的前面没有变化。

尝试一下:

try {
        Scanner input = new Scanner(new File(filename));
        String x = null;

        while((x = input.next()) != null)
        {
        input.useDelimiter(",|\n");
        String name = input.next();
        int strength = input.nextInt();
        int speed = input.nextInt();
        int numVials = input.nextInt();
        Enemy newEnemy = new Enemy(name, strength, speed, numVials);
        opponents.add(newEnemy);
        input.close();
        }

    } catch (FileNotFoundException e) 
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

答案 1 :(得分:1)

您已经编写了:while(input.hasNext());

您需要先删除半冒号。

接下来,您已经在循环内关闭了输入,在循环外也需要完成此操作,因为在第一次关闭后,输入将不会被处理,并且会给出异常。

答案 2 :(得分:0)

由于;语句后的while导致了无限循环。我也相信您的代码存在与逻辑相关的问题。我们可以读取文件的每一行,然后使用以下代码根据','拆分每一行:

        String line[]; 
        do {
            line = input.next().split(",");
            String name = line[0];
            int strength = Integer.parseInt(line[1]);
            int speed = Integer.parseInt(line[2]);
            int numVials = Integer.parseInt(line[3]);
            Enemy newEnemy = new Enemy(name, strength, speed, numVials);
            opponents.add(newEnemy);
            input.close();
        } while (input.hasNext());