问题解析,先定义两个数组,一个数组存储字符出现的次数,一个数组存储已经遇见的字符。代码如下:
String str = "atihhhfughwedckgg";
char[] a = new char[str.length()];
int[] b = new int[str.length()];
要输出字母,所以要将字符串转换为字符的形式。
char[] c = str.toCharArray();
要想输出字符出现的次数需要,初始化 index 为 0,用来记录不同字符的数量。
int index = 0;
for (int i = 0;i<c.length;i++) {
int j;
for (j = 0;j<index;j++) {
if (c[i] == a[j]) {
b[j]++;
break;
}
}
外层循环遍历用来字符数组 c 中的每个字符。内层循环遍历数组 a
,检查当前字符 c[i]
是否已经存在于数组 a
中。如果找到相同的字符,即 c[i] == a[j]
,则增加对应计数 b[j]++
,并通过 break
跳出内层循环。
if (j == index) {
a[index] = c[i];
b[index] = 1;
index++;
}
}
如果内层循环结束,没有使用 break 跳出,则代表数组 a 中没有存放与 c[i]
相同的字符 。 此时将 c[i]
作为新字符存入数组 a 中,并在数组 b 中对应位置设为 1,同时增加 index。
完整代码如下:
public class Demo {
public static void main(String[] args) {
String str = "atihhhfughwedckgg";
char[] a = new char[str.length()];
int[] b = new int[str.length()];
char[] c = str.toCharArray();
int index = 0;
for (int i = 0;i<c.length;i++) {
int j;
for (j = 0;j<index;j++) {
if (c[i] == a[j]) {
b[j]++;
break;
}
}
if (j == index) {
a[index] = c[i];
b[index] = 1;
index++;
}
}
System.out.println("共有"+index+"种字母");
for (int i = 0;i<index;i++){
System.out.println(a[i]+"有"+b[i]+"个");
}
}
}