所以我真的不知道如何用语言来表达。我在将程序创建的文件中的数据传输回程序进行操作时遇到问题。
程序创建一个包含 81 个值 0-9 的 .sp 文件。我正在使用的文件如下所示:
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
为什么会发生这种情况?我没有看到任何错误,调试系统输出似乎证明了这一点。数据是否以某种方式被损坏?
最佳答案
看这里:
puzzle[i][j] = line.charAt(pos);
charAt
返回一个 char
,而不是 int
。当您将字符存储在数组中的某个位置时,将存储该字符的 Unicode 代码点,而不是您期望的整数值。
这可以通过使用 Character
类的 getNumericValue
方法轻松解决:
puzzle[i][j] = Character.getNumericValue(line.charAt(pos));
关于java - 数据无法从文件传输到整数数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28890237/