Добавление объекта из файла в программу - PullRequest
0 голосов
/ 21 сентября 2018

Я программирую игру, и в программу мне нужно добавить новых врагов, основываясь на файле.Сейчас моя проблема в том, что я столкнулся с бесконечным циклом while при попытке прочитать этот файл.Я относительно новичок в программировании, поэтому я не совсем уверен, как это исправить.Вот код проблемы.Пример того, как выглядит запись в файле: «Тролль, 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 голосов
/ 21 сентября 2018

Бесконечный цикл вызывается из-за ; после вашего оператора 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());
0 голосов
/ 21 сентября 2018

Вы написали: while (input.hasNext ());

Сначала необходимо удалить точку с запятой.

Затем вы закрыли вход в цикле, который также долженбыть выполненным вне цикла, так как после первого раза закрываемый вход не будет обработан и выдаст исключение.

0 голосов
/ 21 сентября 2018

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();
    }
...