Java 字符串插入排序未按预期工作
Java String Insertion Sort Not Working As Desired
我的 objective 是创建一个有效的插入排序,它可以使用 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
你把两件事搞混了。对 int
或 Integer
对象进行排序比对 String
对象进行排序要容易得多(尤其是您需要确保 String[] list
仅包含数字),但是如果您想要要对 String 对象进行排序,您需要更改几件事:
您尝试将对 String
对象的引用分配给原始变量
int
:
int key = list[index];
您可以将其更改为:
int key = Integer.valueOf(list[index]);
或将列表从 String[]
更改为 int[]
。
您尝试在原始变量 int
:
上使用 compareTo()
方法
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);
成功编译需要注意的一些事项:
'printsort'方法中的'i'没有声明和初始化。在开始 while 循环之前,你需要像 int i=0
这样的东西。
同时while循环变量需要在循环内部更新以满足结束条件。结束条件将帮助您阻止循环进入无限循环。所以在 System.out.print() 之后需要一个 i++
。
在 System.out.print() 中,您传递变量 i
,它将打印从 0 到长度 1 的数字,而不是列表数组中的字符串。所以你需要像 System.out.print(list[i])
.
这样的东西
在 'sort' 方法中,您有 int key = list[index]
,RHS 将 return String 对象,而不是 LHS 上的 int。 So String key = list[index]
就是你需要的。
我还没有检查插入排序是否正常工作的代码。只是指出了一些语法错误,将帮助您编译代码。
祝一切顺利:)
我的 objective 是创建一个有效的插入排序,它可以使用 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
你把两件事搞混了。对 int
或 Integer
对象进行排序比对 String
对象进行排序要容易得多(尤其是您需要确保 String[] list
仅包含数字),但是如果您想要要对 String 对象进行排序,您需要更改几件事:
您尝试将对
String
对象的引用分配给原始变量int
:int key = list[index];
您可以将其更改为:
int key = Integer.valueOf(list[index]);
或将列表从
String[]
更改为int[]
。您尝试在原始变量
上使用int
:compareTo()
方法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);
成功编译需要注意的一些事项:
'printsort'方法中的'i'没有声明和初始化。在开始 while 循环之前,你需要像
int i=0
这样的东西。同时while循环变量需要在循环内部更新以满足结束条件。结束条件将帮助您阻止循环进入无限循环。所以在 System.out.print() 之后需要一个
i++
。在 System.out.print() 中,您传递变量
i
,它将打印从 0 到长度 1 的数字,而不是列表数组中的字符串。所以你需要像System.out.print(list[i])
. 这样的东西
在 'sort' 方法中,您有
int key = list[index]
,RHS 将 return String 对象,而不是 LHS 上的 int。So String key = list[index]
就是你需要的。
我还没有检查插入排序是否正常工作的代码。只是指出了一些语法错误,将帮助您编译代码。
祝一切顺利:)