Ошибка NumberFormatException - чтение из файла и анализ входных данных как числа - PullRequest
0 голосов
/ 02 мая 2019

У меня проблемы с выяснением, что не так с моим кодом Java. Я создаю игру викторины, которая считывает значение идентификатора вопроса, вопроса, ответа и ответа из файла данных.

Я пробовал все виды вещей, но получаю то же самое NumberFormatException.

Ниже приведен пример настройки файла данных: всего 10 вопросов

1: 01 2: Что такое свет, как перо, но даже самый сильный человек не может держать его больше чем несколько минут? 3: его дыхание 4: 3

Game.java

import java.util.*;
import java.io.*;

public class Game {

    // Instance Variables

    private QuestionBank[] questions;
    private int numQuestions;
    private int questionNumber;
    private int playerScore;

    // Constructor

    public Game()
    {
        QuestionBank[] questions = new QuestionBank[10];
        numQuestions = 0;
        questionNumber = 0;
        playerScore = 0;
    }

    public Game(FileInputStream questionsFile)
    {

        BufferedReader br = new BufferedReader(new InputStreamReader(questionsFile));
        String stringLine = null;
        int i = 0;

        try
        {

            while((stringLine = br.readLine()) != null)
            {
                QuestionBank quest = new QuestionBank();
                quest.setQuestionID(Integer.valueOf(br.readLine())); //ERROR OCCURS HERE
                quest.setQuestion(br.readLine());
                quest.setAnswer(br.readLine());
                quest.setPointValue(Integer.valueOf(br.readLine()));

                questions[i] = quest;
                i++;
                stringLine = null;
            }
            br.close();
        } 
        catch (IOException e)
        {
            System.out.println("Uh oh. Exception caught.");

        }

        this.questionNumber = 0;

        /*Scanner questionsFileScanner = new Scanner(questionsFile);
        questions = new QuestionBank[5];

        while(questionsFileScanner.hasNextLine())
        {
            for(int i = 0; i < 4; ++i)
            {
                questions[i] = new QuestionBank();
                questions[i].setQuestion(questionsFileScanner.nextLine());

            }

        }*/

    }

    //Accessors and Mutators

    public int getNumQuestions()
    {
        return numQuestions;
    }

    public int getQuestionNumber()
    {
        return questionNumber;
    }

    public int getPlayerSocre()
    {
        return playerScore;
    }


    public boolean checkAnswer(String answer)
    {
        if(answer.contentEquals(questions[questionNumber].getAnswer()) == true)
        {
            playerScore += questions[questionNumber].getPointValue();
            ++questionNumber;
            return true;
        }

        else
        {
            return false;
        }

    }

    public String getNextQuestion()
    {
        return questions[questionNumber].getQuestion();
    }

    public String toString()
    {
        String outputString = "";
        for (int i = 0; i < questionNumber; ++i)
        {
            outputString = questions[i].toString();
        }

        return outputString;
    }
}
Exception in thread "main" java.lang.NumberFormatException: For input string: "What is light as a feather, but even the strongest man cannot hold it more than a few minutes?"
    at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.base/java.lang.Integer.parseInt(Integer.java:652)
    at java.base/java.lang.Integer.valueOf(Integer.java:983)
    at project7.Game.<init>(Game.java:41)
    at project7.RunGame.main(RunGame.java:41)

1 Ответ

0 голосов
/ 02 мая 2019

В дополнение к тому, что я упомянул выше, вы можете использовать метод StringUtils.isNumeric, чтобы проверить, содержит ли stringLine только числовые значения.

Вы можете найти этот метод с зависимостью Apache Commons Lang.

если вы используете maven, вот ссылка для загрузки его в ваш проект https://mvnrepository.com/artifact/org.apache.commons/commons-lang3/3.5

Если вы не используете maven, вы сможете загрузить jar по этой ссылке (или из https://jar -download.com / artifacts / org.apache.commons / commons-lang3 / 3.5 / source -код ) и затем включить jar в качестве библиотеки в ваш проект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...