Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 排序字符,如何停止重复_Java_Arrays - Fatal编程技术网

Java 排序字符,如何停止重复

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 <

我正在做一项作业,我必须输入一个字符串,然后显示字符串中的每个字符。我算出了密码,但它在重复。因此,例如,如果字符串为“aaabcd”,它将打印:

a频率:3

a频率:3

a频率:3

b频率:1

频率:1

d频率:1

我的目标是让它只打印a一次。这是我的密码。有人能帮我找出我做错了什么吗

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
嘿!谢谢,但我的作业不允许使用地图。