方法不会正确地增加Mapset的值

时间:2014-06-13 06:28:55

标签: java map hashset

我的方法仍在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));
}

我的代码有问题的任何想法?

尼克 -

2 个答案:

答案 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 .... }