给定一个字符串,找出这个字符串中出现最多的字符和次数
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,而原始类型实例变量的缺省值与它们的类型有关。
每天进步一点点!