Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java BufferedReader文件IO提供奇数、不准确的输出_Java_Io_Bufferedreader - Fatal编程技术网

Java BufferedReader文件IO提供奇数、不准确的输出

Java BufferedReader文件IO提供奇数、不准确的输出,java,io,bufferedreader,Java,Io,Bufferedreader,这里的想法是,程序逐个字符地遍历文本文件,统计每个字母的出现次数,然后将出现次数存储到数组中。然而,我得到了奇怪的,不准确的输出,我似乎无法修复。在线答案似乎没有什么帮助。这可能是我遗漏的一些非常简单的东西,但我需要在正确的方向上进行额外的推动 char token; char[] alphabet = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', '

这里的想法是,程序逐个字符地遍历文本文件,统计每个字母的出现次数,然后将出现次数存储到数组中。然而,我得到了奇怪的,不准确的输出,我似乎无法修复。在线答案似乎没有什么帮助。这可能是我遗漏的一些非常简单的东西,但我需要在正确的方向上进行额外的推动

char token;
char[] alphabet = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
int[] occurences = new int[25];
BufferedReader inFile = new BufferedReader(new FileReader("plaintext.txt"));

while (inFile.read() > -1) {
    token = (char)inFile.read();
    for (int i = 0; i < alphabet.length; i++) {
        if (Character.compare(token, alphabet[i]) == 0) {
            occurences[i] += 1;
        }
    }
}

for (int i = 0; i < occurences.length; i++) {
        System.out.println(occurences[i]);
}

inFile.close();
我得到以下输出:

3
1
1
0 
1
0
1
0
0
0
0
0
0
0
0
0
0
1
0
1
0
1
0
0
0

提前谢谢

您忽略了用

while (inFile.read() > -1) {
    token = (char)inFile.read();
不要那样做。阅读并使用它们

int intToken = 0;
while ((intToken = inFile.read()) > -1) {
    token = (char)intToken;
这个

翻译为:读取一个字符,丢弃它。读另一本,好好对待它。再读一本、放弃等

你可以获得灵感-基本上:

int c;
while ((c = inFile.read()) != -1) {
    // there's no need to declare token before this loop
    char token =  (char) c ;  
}

你忽略了许多读到的字符,不要这样做!这,
while(infle.read()>-1){
reads and discards!多亏了你们两个!它成功了。我现在明白了,所以我因为调用它两次而扔掉了字符?@LordValkyrie确实,你扔掉了50%的输入
while (inFile.read() > -1) {
    token = (char)inFile.read();
int c;
while ((c = inFile.read()) != -1) {
    // there's no need to declare token before this loop
    char token =  (char) c ;  
}