我尝试按字母顺序在字符串中对字符进行排序,当我使用以下示例运行我的代码时:hello
,然后我得到:heeeeeeeeeheeeelheeellhee
而不是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);
}
答案 0 :(得分:1)
为什么这么复杂?
public String sortByChar(String s)
{
char[] cs = s.toCharArray();
Arrays.sort(cs);
return new String(cs);
}
答案 1 :(得分:0)
随时随地修改result
。这是错误的:result
会在您修改字符时收集字符记录,这不是您想要的。
您应该从代码中删除result += ...
,并在循环后使用它:
String result = new String(myArray);
答案 2 :(得分:0)
在循环的每次迭代中,将数组中SPUser
处的字符追加到i
,但数组尚未排序
循环将执行result
循环,因此,对于5个字符的n * (n - 1)
,这将是String
(或20)次迭代。
相反,对数组进行排序,然后根据其内容创建一个新的5 * (5 - 1)
...
String
另请注意,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));
错误且应为for (int j = 0; j < myArray.length; j++) {
,否则您将在同一位置比较相同的字符,这不是您想要做的...
更“准确”的冒泡排序可能看起来像......
for (int j = 1; j < myArray.length; j++) {