Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.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 - Fatal编程技术网

Java 对字符串中的字符进行排序

Java 对字符串中的字符进行排序,java,Java,我试图按字母顺序对字符串中的字符进行排序,当我使用以下示例运行代码时:hello,我得到:heeeeeeeeelheeellhee而不是ehllo。smb可以建议我应该在代码中修复什么吗?提前谢谢 public static void main(String[] args) { String result = ""; Scanner kbd = new Scanner(System.in); String input = kbd.nextL

我试图按字母顺序对字符串中的字符进行排序,当我使用以下示例运行代码时:
hello
,我得到:
heeeeeeeeelheeellhee
而不是
ehllo
。smb可以建议我应该在代码中修复什么吗?提前谢谢

public static void main(String[] args)
    {
        String result = "";
        Scanner kbd = new Scanner(System.in);
        String input = kbd.nextLine();

        char[] myArray = input.toCharArray();

        for(int i = 0; i < myArray.length; i++)
            for(int j = 0; j < myArray.length; j++)
            {
                if(myArray[i] > myArray[j])
                {
                    char temp = myArray[j];
                    myArray[j] = myArray[i];
                    myArray[i] = temp;
                    result += myArray[i];
                }
                else 
                    result += myArray[i];
            }
        System.out.println(result);
    }
publicstaticvoidmain(字符串[]args)
{
字符串结果=”;
扫描仪kbd=新扫描仪(System.in);
字符串输入=kbd.nextLine();
char[]myArray=input.toCharArray();
for(int i=0;imyArray[j])
{
char temp=myArray[j];
myArray[j]=myArray[i];
myArray[i]=温度;
结果+=myArray[i];
}
其他的
结果+=myArray[i];
}
系统输出打印项次(结果);
}
为什么这么复杂

public String sortByChar(String s)
{
    char[] cs = s.toCharArray();
    Arrays.sort(cs);
    return new String(cs);
}

您继续修改
结果
。这是错误的:
result
在修改字符时收集字符记录,这不是您想要的

您应该从代码中删除
result+=…
,并在循环后使用它:

String result = new String(myArray);

在循环的每次迭代中,将数组中
i
处的字符追加到
result
,但数组尚未排序

循环将执行
n*(n-1)
循环,因此,对于5个字符的
字符串
,这将是
5*(5-1)
(或20)次迭代

相反,对数组进行排序,然后根据其内容创建一个新的
字符串

String input = "hello";

char[] myArray = input.toCharArray();

for (int i = 0; i < myArray.length; i++) {
    for (int j = 1; j < myArray.length; j++) {
        if (myArray[i] > myArray[j]) {
            char temp = myArray[j];
            myArray[j] = myArray[i];
            myArray[i] = temp;
        }
    }
}
System.out.println(new String(myArray));
String input=“hello”;
char[]myArray=input.toCharArray();
for(int i=0;imyArray[j]){
char temp=myArray[j];
myArray[j]=myArray[i];
myArray[i]=温度;
}
}
}
System.out.println(新字符串(myArray));
还要注意,
for(int j=0;j
是错误的,应该
for(int j=1;j
,否则您将在同一位置比较同一字符,这不是您想要做的

更“精确”的气泡排序可能看起来像

for (int i = 0; i < (myArray.length - 1); i++) {
    for (int j = 0; j < myArray.length - i - 1; j++) {
        if (myArray[j] > myArray[j + 1]) {
            char swap = myArray[j];
            myArray[j] = myArray[j + 1];
            myArray[j + 1] = swap;
        }
    }
}
for(int i=0;i<(myArray.length-1);i++){
对于(int j=0;jmyArray[j+1]){
字符交换=myArray[j];
myArray[j]=myArray[j+1];
myArray[j+1]=交换;
}
}
}

结果应该是什么?
result+=myArray[i];
一个有趣的方法是将所有字符放入一个树集中,然后迭代内容。@dnault或使用
Arrays.sort
,但我认为这不是练习的重点;)另外,我认为您会找到(int j=0;j
应为(int j=1;j
我试过了,@MadProgrammer。但现在的问题是它没有按字母顺序正确排序。如果我做了
hello
,它会给我
eollh
@John,那么你需要看看你的排序是如何工作的。如果我不纠正内部for循环,我会得到
ollhe
;练习是更好地了解Java,而不是手动导入使用一些“气泡排序”机制。了解集合及其能力是练习的好目标,