我必须读取字符串"hello world"
并仅使用for循环输出每个字母的频率。教练暗示我需要使用两个循环并给我们以下代码开始:
int ch, count;
for (ch ='a'; ch <='z'; ch++) {
//count the number of occurrences in a line
//Print the count>0
}
编辑:我想我会回答这个问题并发布我一年前找到的解决方案,因为这个问题已经得到了相当多的点击量。
int count;
int value;
for (int i=65; i<91; i++) {
count=0;
for (int j=0; j<S.length; j++) {
value=(int)S[j];
if (value == i) {
count++;
}
}
if (count>0)
System.out.println((char)i+" -- "+count);
}
答案 0 :(得分:5)
在第二个for循环中,只需遍历字符串的每个字符,并将其与第一个for循环的当前字符进行比较。
(不是我会做的解决方案,只是跟着你的导师提示)
另一种方法是将值存储在地图中,将字符作为键,将出现的计数器存储为值。
HashMap<Character,Integer> map = new HashMap<>();
for (int ii=0; ii<string.length; ii++) {
char c = string.charAt(ii);
if (map.containsKey(c)) {
map.put(c, get(c)++);
} else {
map.put(c, 1);
}
}
<强>更新强>
//iterating on the map to output values:
for (char key : map.keySet()) {
System.out.println(key+": "+map.get(key));
}
答案 1 :(得分:1)
我会使用一个简单的数组。只需将每个字母转换为索引并在该索引处递增数组。
int letters[26];
int index = ch - 'a';
letters[index]++;
答案 2 :(得分:1)
建立sdasdadas的评论和Jean的答案:
外部for循环将旋转字母表中的每个字符,保持计数(每次外循环执行时都需要重置。)内部循环遍历“hello world”字符串,如果是,则递增计数器找到作为外部for循环的当前参数的字符。
<强>更新强> 我无法评论安德烈的回答,但我可以提供一些伪代码来解决我认为你在关于反击的评论中的意思。
int i;
for (ch characterOuter : alphabet){ //for each character in the alphabet
i = 0 //i starts at zero, and returns to zero for each iteration <-----THIS
for (ch characterInner : "hello world"){
if (characterOuter == characterInner){
i++; //increase i by 1 <-----AND THIS
}//end if
}//end innerfor
if (i > 0) {
print(characterOuter + " -- " + i);
} //end if; <---------------- this if statement was missing
}//end outer for
另请参阅this question。
答案 3 :(得分:0)
int count;
int value;
for (int i=65; i<91; i++) {
count=0;
for (int j=0; j<S.length; j++) {
value=(int)S[j];
if (value == i) {
count++;
}
}
if (count>0)
System.out.println((char)i+" -- "+count);
}