黑马程序员技术交流社区
标题:
写了一个列出字母出现次数程序,挂了
[打印本页]
作者:
张振纲
时间:
2012-8-20 17:02
标题:
写了一个列出字母出现次数程序,挂了
本帖最后由 张振纲 于 2012-8-20 17:15 编辑
package com.zzg.java;
/*
* 需求:用户输入一个英文字符串,得出字符串所有字母出现次数
* 思路:
* 1.将字符串串号为字符数组
* 2.定义一个计数器与指针,通过indexOf方法获取位置
* 3.从指针位置继续查找,直到没有这个元素,则打印结果
* */
public class getCharTimes {
public static void main(String[] args){
String user = "sdfasdewefqmcoad";
getTimes(user);
}
private static void getTimes(String user) {
char[] userString = user.toCharArray();
char zimu ;
int times = 0;
int zhizhen = 0;
for (int x = 0; x < userString.length; x++) {
zimu=userString[x];
while((user.indexOf(zimu))!=-1){
int weizhi = user.indexOf(zimu, zhizhen);
times++;
zhizhen=weizhi+1;
user = user.substring(zhizhen);
}
while((user.indexOf(zimu))==-1){
System.out.println(zimu+"出现的次数是"+times+"次");
times=0;
zhizhen=0;
}
}
}
}
复制代码
作者:
李知伦
时间:
2012-8-20 18:06
本帖最后由 李知伦 于 2012-8-20 18:07 编辑
Line31不应该用while,应该用if, 因为判断条件user.indexOf(zimu)在循环体内没有改变,一直是-1,也就出现了死循环
Line29改变了user的值, 下一轮循环(x=1), 导致Line25的user取值就不对了
我用HashMap写的
import java.util.HashMap;
import java.util.Map;
public class getCharTimes {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "sdfasdewefqmcoad";
String character = "";
int frequency = 0;
Map<String, Integer> map = new HashMap<String, Integer>();
for (int i=0; i < str.length(); i++) {
String key = str.substring(i, i+1);
if (map.containsKey(key)) {
map.put(key, map.get(key)+1);
}
else {
map.put(key, 1);
}
}
for (Map.Entry<String, Integer> m : map.entrySet()) {
//取得最终的Key,value
character = m.getKey();
frequency = m.getValue();
System.out.println(character + "(" + frequency + ")");
}
}
}
复制代码
作者:
王德升
时间:
2012-8-20 18:17
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+"次");
}}
//这是我改后的代码,建议楼主注意类名的大小写。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2