1. “给定一个字符串,找出这个字符串中出现最多的字符和次数”,
public class FindChar {
public static void main(String args[]){
String str="sgssssssssssjkoouyfdcjkkjhgdedryunnbbvffdssghhhj";
find(str);
}
public static void find(String s){
Character findchar= null;
int len=s.length();
int cout=0;
HashMap<Character,Integer> hp=new HashMap<Character,Integer>();
for(int i=0;i<len;i++){
char ch=s.charAt(i);
if(!hp.containsKey(ch))
hp.put(ch, 1);
else
{int index=hp.get(ch)+1;
hp.put(ch, index);
if(index>cout){
cout=index;
findchar=ch;
}
}
}
System.out.println(cout);
System.out.println(findchar);
}
}
遇到的问题:
1.静态方法中不能调用非静态方法,
静态方法的内存分配时间与实例方法不同 当程序开始运行时,静态方法已经在内存中被分配了空间,有了入口地址,所以可以通过"类名.方法名"直接调用 而实例方法只有在创建了该类的对象以后才分配内存 也就是说程序开始运行后静态方法已经有了入口地址,而此时实例方法可能并未被分配内存,所以无法通过静态方法调用实例方法 同理也不能用"类名.方法名"的方式调用实例方法
因此,find(String s)方法必须加上static标识符。
2.Character findchar= null;这种写法是可以的,但是当我写成char findchar=null的时候,会出现空指针异常,因为Charater是作为对象而存在的;而char只是原始数据类型,另外,hashmap里面只能存引用类型,不能存基本类型。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。