为什么 BufferedReader read() 会拾取额外的字符
Why is BufferedReader read() picking up extra character
我正在创建一个霍夫曼编码方法,该方法使用缓冲 reader 来读取文件,将新的 char 值添加到名为 'characters[128]' 的数组中,如果该 char 已经存在于 'characters[128]' 然后将 1 添加到该字符的 frequency/count (我将其存储在与字符相同的索引处的 charCount[128] 中)。我会附上我的代码,但是当我 运行 这个时,它会为最后一个字符打印出一个未知的 char () ,这意味着它比它应该的更晚一次停止 while 循环。你知道为什么吗?我该如何解决这个问题?
public Playground() {
char c;
int size = 0;
char[] characters = new char[128];
int[] charCount = new int[128];
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader("input.txt"));
while ((c = (char)br.read()) != -1) {
for (int i = 0; i <= size; ++i) {
if (size == 0) {
characters[i] = c;
charCount[i]++;
size++;
System.out.println("Letter/Count: " + characters[i] + "/" + charCount[i]);
break;
}
if (characters[i] == c) {
charCount[i]++;
break;
} else if (i == size) {
characters[i] = c;
charCount[i]++;
size++;
System.out.println("Letter/Count:"+characters[i]+"/" + charCount[i]);
break;
}
}
}
br.close();
} catch (IOException e){
System.out.println("IOEXCEPTION: " + e);
}
}
public static void main(String args[]) {
System.out.println("Main Is Working");
Playground p = new Playground();
System.out.println("Constructor is not");
}
问题是您将 int 转换为 char,然后再次将其与 int -1 进行比较。做这样的事情:-
int i = -1;
while ((i = br.read()) != -1) {
char c = (char)i;
for (int i = 0; i <= size; ++i) {
if (size == 0) {
characters[i] = c;
charCount[i]++;
size++;
System.out.println("Letter/Count: " + characters[i] + "/" + charCount[i]);
break;
}
if (characters[i] == c) {
charCount[i]++;
break;
} else if (i == size) {
characters[i] = c;
charCount[i]++;
size++;
System.out.println("Letter/Count: " + characters[i] + "/" + charCount[i]);
break;
}
}
}
我正在创建一个霍夫曼编码方法,该方法使用缓冲 reader 来读取文件,将新的 char 值添加到名为 'characters[128]' 的数组中,如果该 char 已经存在于 'characters[128]' 然后将 1 添加到该字符的 frequency/count (我将其存储在与字符相同的索引处的 charCount[128] 中)。我会附上我的代码,但是当我 运行 这个时,它会为最后一个字符打印出一个未知的 char () ,这意味着它比它应该的更晚一次停止 while 循环。你知道为什么吗?我该如何解决这个问题?
public Playground() {
char c;
int size = 0;
char[] characters = new char[128];
int[] charCount = new int[128];
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader("input.txt"));
while ((c = (char)br.read()) != -1) {
for (int i = 0; i <= size; ++i) {
if (size == 0) {
characters[i] = c;
charCount[i]++;
size++;
System.out.println("Letter/Count: " + characters[i] + "/" + charCount[i]);
break;
}
if (characters[i] == c) {
charCount[i]++;
break;
} else if (i == size) {
characters[i] = c;
charCount[i]++;
size++;
System.out.println("Letter/Count:"+characters[i]+"/" + charCount[i]);
break;
}
}
}
br.close();
} catch (IOException e){
System.out.println("IOEXCEPTION: " + e);
}
}
public static void main(String args[]) {
System.out.println("Main Is Working");
Playground p = new Playground();
System.out.println("Constructor is not");
}
问题是您将 int 转换为 char,然后再次将其与 int -1 进行比较。做这样的事情:-
int i = -1;
while ((i = br.read()) != -1) {
char c = (char)i;
for (int i = 0; i <= size; ++i) {
if (size == 0) {
characters[i] = c;
charCount[i]++;
size++;
System.out.println("Letter/Count: " + characters[i] + "/" + charCount[i]);
break;
}
if (characters[i] == c) {
charCount[i]++;
break;
} else if (i == size) {
characters[i] = c;
charCount[i]++;
size++;
System.out.println("Letter/Count: " + characters[i] + "/" + charCount[i]);
break;
}
}
}