A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张振纲 中级黑马   /  2012-8-20 17:02  /  1903 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张振纲 于 2012-8-20 17:15 编辑
  1. package com.zzg.java;
  2. /*
  3. * 需求:用户输入一个英文字符串,得出字符串所有字母出现次数
  4. * 思路:
  5. * 1.将字符串串号为字符数组
  6. * 2.定义一个计数器与指针,通过indexOf方法获取位置
  7. * 3.从指针位置继续查找,直到没有这个元素,则打印结果
  8. * */
  9. public class getCharTimes {
  10. public static void main(String[] args){
  11. String user = "sdfasdewefqmcoad";
  12. getTimes(user);

  13. }

  14. private static void getTimes(String user) {
  15. char[] userString = user.toCharArray();
  16. char zimu ;

  17. int times = 0;
  18. int zhizhen = 0;

  19. for (int x = 0; x < userString.length; x++) {
  20. zimu=userString[x];
  21. while((user.indexOf(zimu))!=-1){
  22. int weizhi = user.indexOf(zimu, zhizhen);
  23. times++;
  24. zhizhen=weizhi+1;
  25. user = user.substring(zhizhen);
  26. }
  27. while((user.indexOf(zimu))==-1){
  28. System.out.println(zimu+"出现的次数是"+times+"次");
  29. times=0;
  30. zhizhen=0;
  31. }
  32. }
  33. }
  34. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
田建 + 1

查看全部评分

2 个回复

倒序浏览
本帖最后由 李知伦 于 2012-8-20 18:07 编辑

Line31不应该用while,应该用if, 因为判断条件user.indexOf(zimu)在循环体内没有改变,一直是-1,也就出现了死循环

Line29改变了user的值, 下一轮循环(x=1), 导致Line25的user取值就不对了

我用HashMap写的
  1. import java.util.HashMap;
  2. import java.util.Map;
  3. public class getCharTimes {
  4.         
  5.         public static void main(String[] args) {
  6.                 // TODO Auto-generated method stub
  7.                 String str = "sdfasdewefqmcoad";
  8.                 String character = "";
  9.                 int frequency = 0;
  10.                 Map<String, Integer> map = new HashMap<String, Integer>();               
  11.                 for (int i=0; i < str.length(); i++) {                        
  12.                         String key = str.substring(i, i+1);               
  13.                         if (map.containsKey(key)) {
  14.                                 map.put(key, map.get(key)+1);
  15.                         }
  16.                         else {
  17.                                         map.put(key, 1);
  18.                         }
  19.                 }           
  20.                 for (Map.Entry<String, Integer> m : map.entrySet()) {
  21.                         //取得最终的Key,value
  22.                         character = m.getKey();
  23.                         frequency = m.getValue();                        
  24.                         System.out.println(character + "(" + frequency + ")");
  25.                 }
  26.         }
  27. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
田建 + 1

查看全部评分

回复 使用道具 举报
public class GetCharTimes {

public static void main(String[] args){

String user = "sdfasdewefqmcoad";

getTimes(user,"e");

}



public static void getTimes(String user,String s) {

//char[] userString = user.toCharArray();

//char zimu ;

int times = 0;

int zhizhen = 0;

while((zhizhen = user.indexOf(s))!=-1){

        //int weizhi = user.indexOf(zimu, zhizhen);
        user = user.substring(zhizhen+s.length());

        times++;

        //zhizhen=weizhi+1;
}
        System.out.println(times+"次");

}}


//这是我改后的代码,建议楼主注意类名的大小写。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马