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,而不是手动导入使用一些“气泡排序”机制。了解集合及其能力是练习的好目标,