Сравнение целых чисел из текстового файла и программы, в которой задействованы строки - PullRequest
0 голосов
/ 26 апреля 2018

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

Пример текстового файла:

Name, 8
Name, 1
Name, 4

Код, который я использую для сравнения:

        int highScore = 0;
        try {
        BufferedReader reader = new BufferedReader(new FileReader("txt.txt"));
        String line = reader.readLine();

        while (line != null)                  
        {
            try {
                int score = Integer.parseInt(line.trim());   
                if (score > highScore)                       
                { 
                    highScore = score; 
                }
            } catch (NumberFormatException e1) {
                //ignore invalid scores
                //System.err.println("ignoring invalid score: " + line);
            }
            line = reader.readLine();
        }
        reader.close();

    } catch (IOException ex) {
        System.err.println("ERROR");
    }

Остальная часть кода в порядке, и счет генерируется, когда игра заканчивает сравнивать его со счетом в файле, он просто генерирует значение 0 при сравнении, поскольку читает строку и не работает. Я не уверен, как использовать сканеры / разделители.

EDIT: Я хотел бы, чтобы программа выполнялась и показывала имя пользователя, который получил этот рекорд. Таким образом, желаемый результат будет;

The all time high score was 8 by Name1

В настоящее время он говорит только рекорд (после ввода Michu93).

Ответы [ 3 ]

0 голосов
/ 26 апреля 2018

Обратите внимание, что когда вы читаете целую строку, вы получаете String как с именем, так и с Integer, которое вы хотите получить. Я бы сделал следующее:

int highScore = 0;
String name = "";
try {
   BufferedReader reader = new BufferedReader(new FileReader("txt.txt"));
   String line = null;
   while ((line = reader.readLine()) != null) {
       try {
           String[] parts = line.split(",");
           if(parts.length > 1){
             int score = Integer.parseInt(parts[1].trim());
             if (score > highScore) {
                highScore = score;
                name = line[0];
             }
           }
       } catch (NumberFormatException e1) {
        //ignore invalid scores
        //System.err.println("ignoring invalid score: " + line);
      }
   }
   System.out.println("The all time high score was %s by %s", highScore, name);
   reader.close();
0 голосов
/ 26 апреля 2018

Запустите приведенную ниже программу. Это даст вам желаемый результат. Пожалуйста, исправьте другие вещи, я просто сконцентрировался на выводе.

    public class Test {
    static int highScore = 0;
    static String highscorer = "";
    public static void main(String[] args) {
        try {
            BufferedReader reader = new BufferedReader(new FileReader("src/com/test/package1/txt.txt"));
            String line = null;
            while ((line = reader.readLine()) != null) {
                try {
                    String[] parts = line.split(",");
                    int tempScore = Integer.parseInt(parts[1].trim());
                    String tempHigScorer = (parts[0]);
                    if (tempScore > highScore) {
                        highScore = tempScore;
                        highscorer = tempHigScorer;
                    }
                } catch (NumberFormatException e1) {
                    // handle NumberFormatException if any
                }
            }
            reader.close();
        } catch (IOException ex) {
            System.err.println("ERROR");
        }
        System.out.println("The all time high score was " + highScore + " by name " + highscorer);
    }
}

enter image description here

0 голосов
/ 26 апреля 2018

Удалить цифры из строки и разобрать их в int:

int score = Integer.valueOf(line.replaceAll("[^\\d.]", ""));

@ Edit

int highScore = 0;
String name = "";
try {
    BufferedReader reader = new BufferedReader(new FileReader("txt.txt"));
    String line = reader.readLine();

    while (line != null) {
        try {
            int score = Integer.parseInt(line.split(" ")[1]); 
            if (score > highScore) { 
                highScore = score; 
                name = line.split(" ")[0].replace(",", "");
            }
        } catch (NumberFormatException e1) {
            //ignore invalid scores
            //System.err.println("ignoring invalid score: " + line);
        }
        line = reader.readLine();
    }
    System.out.println(String.format("The all time high score was %s by %s", highscore, name));

} catch (IOException ex) {
    System.err.println("ERROR");
} finally {
    reader.close(); // close stream always in finnaly block or use try with resources!!!
}
...