我的目标是创建一个工作插入排序,它可以使用main方法中给出的数组来处理字符串和整数。在这个例子中,我称之为列表。
public class insort{
public static void main(String[]list){
sort(list);
printsort(list);
}//main
public static void sort(String[]list){
for (int index = 1; index < list.length; index++){
int key = list[index];
int position = index;
while (position > 0 && key.compareTo(list[position-1]) < 0){
list[position] = list[position-1];
position--;
}//while
list[position] = key;
}//for
}//sort
public static void printsort(String[]list){
while ( i < list.length){
System.out.print(i);
}//while
}//printsort
}//insort
答案 0 :(得分:1)
成功编译需要注意的一些事项:
'printsort'方法中的'i'未声明和初始化。在开始while循环之前,您需要int i=0
之类的东西。
此外,while循环变量需要在循环内更新,以满足结束条件。结束条件将帮助您阻止循环进入无限循环。因此,在System.out.print()之后需要i++
。
在System.out.print()中传递变量i
,它将打印0到length-1之间的数字,而不是列表数组中的字符串。所以你需要System.out.print(list[i])
。
在'sort'方法中,您有int key = list[index]
,RHS将返回一个String对象,而不是您在LHS上的int。 So String key = list[index]
就是你所需要的。
我没有检查代码是否正确插入排序。刚刚指出了一些可以帮助你编译代码的语法错误。
一切顺利:)
答案 1 :(得分:0)
你混合了几件事。对int
或Integer
个对象进行排序比对String
对象(尤其是您需要确保String[] list
只包含数字)要容易得多,但是如果你想要的话要对String对象进行排序,你需要改变几件事:
您尝试将对String
对象的引用分配给原始变量
int
:
int key = list[index];
您可以将其更改为:
int key = Integer.valueOf(list[index]);
或将列表从String[]
更改为int[]
。
您尝试在原始变量compareTo()
上使用int
方法:
int key = list[index];
(key.compareTo(list[position-1])) < 0
原始变量没有方法。你可以解决1和2
使用Integer
对象而不是int
变量的问题:
Integer key = Integer.valueOf(list[index]);
或者,如果您希望使用int
变量,请尝试使用:
key < list[position-1]
而不是:
(key.compareTo(list[position-1])) < 0
您的while
循环错误:
while ( i < list.length){
System.out.print(i);
}//while
尝试:
for(String element : list){
System.out.println(element);
}
打印list
的每个元素。
您还更改了main
方法,从main(String[] args)
更改为main(String[] list)
,并尝试在String[] list
上使用排序。您应该创建新的String[]
数组,并尝试使用它,例如:
String[] list = {"4","6","1","8"};
sort(list);