我的方法仍在MapSet中生成错误的值。我们的想法是将每个键的(char)值增加一个字符被输入流吐出的次数。如果密钥尚未存在,则将其添加到地图集并设置为1.
public static Map<Character, Integer> getCounts(FileInputStream input) throws IOException{
Integer plusOne = 1;
Map<Character, Integer> charCount = new HashMap<Character, Integer>();
while(input.read() >= 0){
Character aByte = (char) input.read();
if(charCount.containsKey(aByte)){
System.out.println(aByte);
charCount.put(aByte, charCount.get(aByte)+plusOne);
}
else
charCount.put(aByte, 1);
}
return charCount;
}
这是测试文件的组成部分:这是一堆文本。点击保存。点击保存..
这些是我的结果:{f = 0,= 2,c = 0,C = 1,。= 2,k = 1,h = 0,i = 2,?= 0,v = 1,u = 0,t = 0,s = 2,x = 0}
这是我的测试代码:
public static void main(String[] args)throws FileNotFoundException, IOException {
FileInputStream test = new FileInputStream(new File("BunchofText.txt"));
System.out.println(HuffmanNode.getCounts(test));
}
我的代码有问题的任何想法?
尼克 -
答案 0 :(得分:2)
您通过在while循环的guard子句中调用input.read()
来丢弃一半输入流:该调用消耗一个字符。你必须记住这样的角色:
int b;
while( (b= input.read()) >= 0) {
Character aByte = (char) b;
...
}
答案 1 :(得分:0)
在while循环中有一个对input.read()方法的调用以及从流中获取字符的其他调用,这反过来每次跳过一个字符..
所以要解决这个问题,你可以使用
int intInput = 0;
while( (intInput = input.read()) >=0 ){
Character aByte = (char)intInput;
your code as it is ....
}