看到这个题哈,第一想法就是建立两个数组,分别存放char 和 number(次数);
具体思路:
建立一个先从控制台输入一串字符,把它转换成char[ ];然后建立两个数组分别存放char[ ] 和次数value[ ],最后让每一个字符都进行比较,从0循环遍历比较如果相等就置空(防止下次比较的时候会重复,和为了向char[ ] 数组中添加元素的时候会重复),然后遍历判断每一种相等的情况(因为你每次判断相等的时候就会置空后面相等的元素所以以后再次判断的时候就不会出现与原先相等的情况保证了数据的唯一性)最后循环遍历两个数组,让它们一一对应。
具体代码实现:
package ArrayRideMethod;
import java.util.Scanner;
public class ArrayRepeatComparator {
public static void main(String[] args) {
//输入一个英语字符串并把它转换成字符数组
String s =new Scanner(System.in).nextLine();
char[]a = s.toCharArray();
//定义两个数组 key[]代表的是保存的单个字符 value[]代表的是保存 每个字符的出现次数
char[]key=new char[100];
int []value = new int[100];
//初始化value 因为每个字符只要一比较value值就是2,所以初始化为1,为下面的代码做铺垫
for(int i=0;i<100;i++) {
value[i]=1;
}
//用temp变量表示这两个数组的lenght
int temp =0;
//循环比较每一个字符做判断
for(int i =0;i<a.length;i++) {
for(int j = 0;j<a.length;j++) {
//因为每一个字符都要与其他所有的字符(包括自己在内)作比较下面判断的时候如果是相等把后面的清空、
//在这里要进行判断提高效率(如果是空或者相等的话比较没有意义 就继续下一个的比较)
if(a[i]!=0&&i!=j) {
//如果不是空就赋给key[ ]
key[temp]=a[i];
if(a[i]==a[j]){
//如果相等就清空,防止下一次重复判断
a[j]=0;
//如果相等就在此索引上加 1
value[temp]++;
}
}else {
continue;
}
}
//如果字符数组不是空 就加 1
if(a[i]!=0) {
temp++;
}
}
//遍历出结果
for(int z=0;z<temp;z++) {
System.out.print(key[z]+" ");
}
System.out.println();
for(int z=0;z<temp;z++) {
System.out.print(value[z]+" ");
}
}
}
结果输出:
总结:字符数组清空-----直接给字符数组赋值为 0