Сбой при передаче данных из файла в целочисленный массив

Так что я действительно не уверен, как выразить это словами. У меня проблемы с переносом данных из файла, созданного моей программой, обратно в программу для манипуляции.

Программа создает файл.sp, состоящий из 81 значения 0-9. Вот как выглядит файл, который я использую:

000030640020698170085700003007010000090503060000060700800007290012489050054020000

Код, который я использую для извлечения этих значений из файла в массив целых чисел:

JFileChooser chooser = new JFileChooser();
        int[][] puzzle = new int[9][9];
        chooser.setCurrentDirectory(new File("~/Documents"));
        int retrieval = chooser.showSaveDialog(null);
        if(retrieval == JFileChooser.APPROVE_OPTION){
            FileReader fr = null;
            try {
                fr = new FileReader(chooser.getSelectedFile());
            } catch (FileNotFoundException e){
                e.printStackTrace();
            }
            BufferedReader textReader = new BufferedReader(fr);
            String line = textReader.readLine();

            int pos = 0;
            for(int i = 0; i < 9; i++)
                for(int j = 0; j < 9; j++){
                    System.out.println("Putting " + line.charAt(pos) + " in (" + i + ", " + j + ")");
                    puzzle[i][j] = line.charAt(pos);
                    pos++;
                }

line распечатывается как:

000030640020698170085700003007010000090503060000060700800007290012489050054020000

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

Putting 0 in (0, 0)
Putting 0 in (0, 1)
Putting 0 in (0, 2)
Putting 0 in (0, 3)
Putting 3 in (0, 4)
Putting 0 in (0, 5)
Putting 6 in (0, 6)
Putting 4 in (0, 7)
Putting 0 in (0, 8)
Putting 0 in (1, 0)

Однако, когда я просматриваю вновь созданную матрицу, я получаю:

48 48 48 48 51 48 54 52 48 
48 50 48 54 57 56 49 55 48 
48 56 53 55 48 48 48 48 51 
48 48 55 48 49 48 48 48 48 
48 57 48 53 48 51 48 54 48 
48 48 48 48 54 48 55 48 48 
56 48 48 48 48 55 50 57 48 
48 49 50 52 56 57 48 53 48 
48 53 52 48 50 48 48 48 48 

Почему это происходит? Я не вижу никаких ошибок, и отладочная система, кажется, доказывает это. Данные как-то повреждаются?

1 ответ

Смотри сюда:

puzzle[i][j] = line.charAt(pos);

charAt возвращает charне int, Когда вы храните символ в позиции в вашем массиве, сохраняется кодовая точка Unicode символа, а не ожидаемое целочисленное значение.

Это может быть легко решено с помощью Character класса getNumericValue метод:

puzzle[i][j] = Character.getNumericValue(line.charAt(pos));
Другие вопросы по тегам