Java 排序字符,如何停止重复
我正在做一项作业,我必须输入一个字符串,然后显示字符串中的每个字符。我算出了密码,但它在重复。因此,例如,如果字符串为“aaabcd”,它将打印: a频率:3 a频率:3 a频率:3 b频率:1 频率:1 d频率:1 我的目标是让它只打印a一次。这是我的密码。有人能帮我找出我做错了什么吗Java 排序字符,如何停止重复,java,arrays,Java,Arrays,我正在做一项作业,我必须输入一个字符串,然后显示字符串中的每个字符。我算出了密码,但它在重复。因此,例如,如果字符串为“aaabcd”,它将打印: a频率:3 a频率:3 a频率:3 b频率:1 频率:1 d频率:1 我的目标是让它只打印a一次。这是我的密码。有人能帮我找出我做错了什么吗 char[] charArray = userSort.toCharArray(); char tempChar; for (int i = 0; i <
char[] charArray = userSort.toCharArray();
char tempChar;
for (int i = 0; i < charArray.length; i++) {
for (int j = 0; j < charArray.length; j++) {
if (charArray[i] < charArray[j]) {
tempChar = charArray[i];
charArray[i] = charArray[j];
charArray[j] = tempChar;
}
}
}
String sortedString = "";
for (int i = 0; i < charArray.length; i++) {
userSort += charArray[i];
}
System.out.println(sortedString + "\n");
int counter;
sortedString = "";
for (int i = 0; i < charArray.length; i++) {
counter = 0;
for (int j = 0; j < charArray.length; j++) {
if (charArray[i] == charArray[j]) {
counter++;
}
}
if (!sortedString.contains("Char: " + charArray[i])) {
if (sortedString.equals("")) {
sortedString += " " + charArray[i] + " freq: " + counter + "\n";
} else {
sortedString += " " + charArray[i] + " freq: " + counter + "\n";
}
}
}
System.out.println(sortedString);
System.out.println("");
char[]charArray=userSort.toCharArray();
char tempChar;
for(int i=0;i
我建议您使用映射来计算字符出现的次数
final Map<Character, Integer> map = new HashMap<>();
char[] charArray = userSort.toCharArray();
for( char c : charArray ){
map.merge(c, 1, ( v1, v2 ) -> v1 == null ? v2 : v1 + v2);
}
map.forEach((character, frequency) -> System.out.println(character + " freq: " + frequency ));
final Map=new HashMap();
char[]charArray=userSort.toCharArray();
用于(字符c:charArray){
合并(c,1,(v1,v2)->v1==null?v2:v1+v2);
}
map.forEach((字符,频率)->System.out.println(字符+“频率:”+frequency));
好处是一切都变得非常小和紧凑看看计算结果:
for (int i = 0; i < charArray.length; i++) {
counter = 0;
for (int j = 0; j < charArray.length; j++) {
if (charArray[i] == charArray[j]) {
counter++;
}
}
for(int i=0;i
由于charArray已排序(不是吗?),您可以执行以下操作:
for (int i = 0; i < charArray.length; i++) {
counter = 0;
for (int j = i; j < charArray.length && charArray[j] == charArray[i]; j++) {
counter++;
}
for(int i=0;i
因此跳过相同的字符:
for (int i = 0; i < charArray.length; ) {
counter = 0;
for (int j = i; j < charArray.length && charArray[j] == charArray[i]; j++) {
counter++;
}
...
i += counter;
for(int i=0;i
嘿!谢谢,但我的作业不允许使用地图。