昨天问的问题没有人回复,今天自己写了一个程序,但是感觉好臃肿,有没有其他改进方式的?(集合还没学,以一个大数组代替了{:2_31:})
需求如下:
从控制台接收一串字符串,完成以下要求 (共10分)
a,求出该字符串的长度并输出到控制台,如字符串长度为:X
b,将该字符串转为数组,判断该数组第一个字符和最后一个字符是否相同,不相同则交换
c,统计出数组中的每个字符出现的次数,然后自然排序后按指定格式输出到控制台,如 a=3,b=4,c=4,d=3,e=2,f=1
d,将第二步互换后的数组角标为奇数的字符用”*”号替换,然后遍历输出
private static void String8() {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
char[] c = s.toCharArray();
System.out.println("字符串长度为:" + c.length);//完成需求a
if (c[0] == c[c.length - 1]) {
System.out.println("第一个元素与最后一个元素相同");
} else {
char temp;
temp = c[0];
c[0] = c[c.length - 1];
c[c.length - 1] = temp;
System.out.println("第一元素与最后一个元素不同,现已交换");//完成需求b
}
int i = 0;
int a = 0;
char[] cc = new char[1000];
int[] aa = new int[1000];
a: while (i < c.length) {
for (int j = 0; j <= i; j++) { //判断是否是前面出现过的字符,是就该字符对应的计数器+1
if (c[i] == cc[j]) {
aa[j]++;
i++;
continue a;
}
} //否则该字符交给另外字符数组的新元素,并让其所对应的计数器+1
cc[a] = c[i];
aa[a++] = 1;
i++;
}
for (int j = 0; j < a; j++) { //输出需求c
System.out.print(cc[j] + "个数是:" + aa[j] + " ");
}
System.out.println();
for (int j = 1; j < c.length; j += 2) {
c[j] = '*';
}
for (int j = 0; j < c.length; j++) { //需求d
System.out.print(c[j] + " ");
}
} |