java大神

求救java大神
代码如下:
import java.util.*;

//需求:打印一个字符串,输出每个字母及其所出现的次数。
class MapTest 
{
public static void main(String[] args) 
{
WordNum wn = new WordNum("wejqjfdsanfvnvjdashgf");
TreeMap<Character,Integer> ts = wn.compute();
Set<Character> s =  ts.keySet();
Iterator<Character> it = s.itrator();
while(it.hasNext())
{
char c = it.next();
System.out.println(c + "(" + ts.get(c) + ")");
}
}
}

class WordNum
{
private String word;

WordNum(String word)
{
this.word = word;
}

public <Character,Integer>TreeMap compute()
{
TreeMap<Character,Integer> ts = new TreeMap<Character,Integer>();
for(int i = 0;i < word.lenth();i++)
{
Character c = word.charAt(i);
Integer number = 0;
for(int j = 0;j < word.lenth();j++)
{
if(c.compareTo(word.charAt(j)) == 0)
number++;
}
ts.put(c,number);
}
return ts;
}
}

总会出现下面的错误
E:\ajava>javac MapTest.java
MapTest.java:8: 错误: 不兼容的类型; 不存在类型变量Character,Integer的实例, 以使T
reeMap与TreeMap<java.lang.Character,java.lang.Integer>一致
                TreeMap<Character,Integer> ts = wn.compute();
                                                          ^
  需要: TreeMap<java.lang.Character,java.lang.Integer>
  找到:    <Character,Integer>TreeMap
  其中, Character,Integer是类型变量:
    Character扩展已在方法 <Character,Integer>compute()中声明的Object
    Integer扩展已在方法 <Character,Integer>compute()中声明的Object
MapTest.java:10: 错误: 找不到符号
                Iterator<Character> it = s.itrator();
                                          ^
  符号:   方法 itrator()

求救到底如何修改

------解决思路----------------------
我也是菜鸟,看见的代码的缩进被吓退了。。我上传一个我写的吧,看了你的代码后写的,想法是一样的
-----------------------------------------------------------------------------------------------------------------------------
CharacterCounts类
-----------------------------------------------------------------------------------------------------------------------------
public class CharacterCounts {
private String Word;
private HashMap<Character,Integer> Result;

public CharacterCounts(String Word)
{
this.Word=Word;
Result=new HashMap<Character,Integer>();
}

public void compute()
{
for(int i=0;i<Word.length();i++)
{
Character c=Word.charAt(i);
Set<Character> set=Result.keySet();
if(set.contains(c))
continue;

int number=0;
for(int j=i;j<Word.length();j++)
{
if(Word.charAt(j)==c)
{
number++;
}
}

Result.put(c, number);
}
}

public HashMap<Character,Integer> getResult()
{
return Result;
}
}

-----------------------------------------------------------------------------------------------------------------------------
测试类
-----------------------------------------------------------------------------------------------------------------------------
public class Test {

public static void main(String[] args) {
// TODO Auto-generated method stub
CharacterCounts cc=new CharacterCounts("abdsafgasfasdfasdaa");
cc.compute();

HashMap<Character,Integer> result=cc.getResult();
Set set=result.keySet();
Iterator<Character> it=set.iterator();
while(it.hasNext())
{
Character c=it.next();
System.out.println(c+" : "+result.get(c));
}
}

}


------解决思路----------------------
引用:
Quote: 引用:

原来是网站把贴上来的代码里面的缩进弄没了的,不好意思了

没事,我看了你的代码,你的算法比我当初的代码更加高效,也是我考虑不周。不过我想问一下关于泛型,是不是方法上的泛型必须要放在返回值类型的前面?还有泛型中如果是基本数据类型是不是必须把全名写出,比如int写成Integer?还有为什么不能用int,或char之类的

那不是全名,那是基本类型的包装类,具体什么叫包装类,你可以百度一下。
基本类型因为不是对象,就没有方法,所以就会出现很多问题,比如Integer.parseInt() 这个方法
------解决思路----------------------
引用:
除了遍历map是java8,其他的都是7支持的,运行结果 
d---1
e---3
H---2
i---3
j---2
k---2
l---2
o---1
我---2
r---1
u---1
w---2
z---1


/**
 * Created by puruidong on 2015/4/26.
 */
public class TestDemo {
    public static void main(String[] args) {
        showCm("我HieHie我dlkjwoiuzlkjwer");
    }

    private static void showCm(String str){
        char [] as = str.toCharArray();
        Set <Character> sert = new HashSet<>();
        Map<Character,Integer> maps = new HashMap<Character,Integer>();
        for(char ap:as){
            maps.put(ap,sert.add(ap)?1:maps.get(ap)+1);
        }
        /*maps.forEach((x,y)-> {
            System.out.println(x+"---"+y);*/
        });
    }
}


自己网上找一个遍历map的直接替换那一句就可以了