Java 这个代码有什么问题?哈夫曼编码
在这段代码中,我试图将字符串拆分为字符,并将每个字符放入映射中。如果同一个字符出现不止一次,我会在其上放置一个计数器,并将其放回映射中,增加整数(频率)Java 这个代码有什么问题?哈夫曼编码,java,algorithm,map,huffman-code,Java,Algorithm,Map,Huffman Code,在这段代码中,我试图将字符串拆分为字符,并将每个字符放入映射中。如果同一个字符出现不止一次,我会在其上放置一个计数器,并将其放回映射中,增加整数(频率) 公共类频率映射{ 公共静态映射生成器映射(字符串s){ HashMap myMap=新HashMap(); //生成s中字符频率的映射 //需要将字符串分解为单个字符,对它们进行排序 //在这些频率中,然后将它们放置在地图中 对于(int i=0;i
公共类频率映射{
公共静态映射生成器映射(字符串s){
HashMap myMap=新HashMap();
//生成s中字符频率的映射
//需要将字符串分解为单个字符,对它们进行排序
//在这些频率中,然后将它们放置在地图中
对于(int i=0;i
这是主要的
public static void main(String args[]){
String str = "missisippi";
Map frequencyMap = FrequencyMap.generateMap(str);
HuffmanTree tree = new HuffmanTree(frequencyMap);
Map<Character, String> encodingMap = tree.getEncodingMap();
String encoded = tree.encode(str, encodingMap);
System.out.println(encoded);
}//end of main
publicstaticvoidmain(字符串参数[]){
字符串str=“Missippi”;
Map frequencyMap=frequencyMap.generateMap(str);
HuffmanTree树=新的HuffmanTree(frequencyMap);
Map encodingMap=tree.getEncodingMap();
字符串编码=tree.encode(str,encodingMap);
系统输出打印项次(编码);
}//干管末端
好的,有几件事
字符串是不可变的
s.substring(i);
应该是
s = s.substring(i);
虽然我还是不太清楚这到底是什么意思
第二 这些台词没有意义
myMap.put(ch, i);
if(myMap.containsKey(ch)){
myMap.put(ch, myMap.get(i) + 1);
}
您只需添加键ch
,然后立即询问地图是否包含ch
——这将始终是正确的
我想你可能想把
if
-语句放在第一位,把myMap.put(ch,1)
放在else
-子句中。哦,还有myMap.get(i)
可能应该是myMap.get(ch)
您正在用字符位置初始化计数器:
myMap.put(ch, i);
在您想要的地方:
myMap.put(ch, 1);
在初始化计数器之前,您还需要检查地图中是否存在已存在的字符,增加计数器的值(使用get(ch)
而不是get(i)
),给出:
您的代码遇到了什么问题?行
s.substring(i)
是不可操作的。您只需快速浏览一下s
的子字符串,然后将其丢弃<代码>s.子串(i)代码>未更改s
。在char ch=s.charAt(i)之后;myMap.put(ch,i)代码>,myMap
将始终包含ch
的映射。你不应该在看里面之前插入任何东西。戴夫,也许你应该回去接受你以前问题的一些答案。如果人们认为你无论如何都不会看到答案,那么他们提供帮助的可能性就会降低。
myMap.put(ch, 1);
char ch = s.charAt(i);
//calculating the occurence of a character in a string.
if (myMap.containsKey(ch)){
myMap.put(ch, myMap.get(ch) + 1);
} else {
myMap.put(ch, 1);
}//end of if statement