所以基本上我已经在这个程序上工作了2个多小时,试图弄清楚如何使用compareTo方法对插入排序进行排序,但我的研究或想法都没有。我是java的初学者,所以对我来说有点困难。 如何使用这种方法来理清我无法解决的名称。
package insertion.sort;
import java.util.Scanner;
public class InsertionSort {
public static void swap (int x[] , int y , int z){
int temp;
if (x[y]<x[y-1]){
temp=x[y];
x[y]=x[y-1];
x[y-1]=temp;
}
}
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
String a[]=new String[10];
int i;
for (int ii=1 ; ii<=5 ; ii++){
System.out.println("Enter the "+ii+" name");
a[ii]=in.nextLine();
}
for (i=0 ; i<5 ; i++){
for (int j=i;j>0;j--){
//a[j].compareTo(a[j-1]);
if (a[j].compareTo((a[j-1])))
{
String temp=a[i];
a[i]=a[j];
a[j]=temp;}
}
}
for (int k=0;k<6;k++){
System.out.println(k);
}
}
}
____________________________________________
谢谢你解决了!!!!!!!! 回答:
package insertion.sort;
import java.util.Scanner;
public class InsertionSort {
public static void swap (int x[] , int y , int z){
int temp;
if (x[y]<x[y-1]){
temp=x[y];
x[y]=x[y-1];
x[y-1]=temp;
}
}
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
String a[]=new String[5];
int i;
for (int ii=0 ; ii<5 ; ii++){
System.out.println("Enter the "+ii+" name");
a[ii]=in.nextLine();
}
for (i=1 ; i<5 ; i++){
for (int j=i;j>0;j--){
if (a[j].compareTo(a[j-1])<0)
{
String temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;}}}
for (int k=0;k<5;k++){
System.out.println(a[k]);
}
}
}
答案 0 :(得分:0)
如果查看docs,您会看到compareTo
方法返回一个数字:
如果参数字符串等于此字符串,则值为0;一个值 如果此字符串按字典顺序小于字符串,则小于0 参数;如果此字符串为,则值大于0 按字典顺序大于字符串参数。
在这一行
if (a[j].compareTo((a[j-1])))
您尝试将int
评估为boolean
,这肯定不是您想要实现的目标。如果您希望程序进入if
,如果a[j]
的字面意义上小于a[j-1]
,那么您需要
if (a[j].compareTo((a[j-1])) < 0)
如果您想要if
,如果a[j]
的字典大于a[j-1]
,那么您希望
if (a[j].compareTo((a[j-1])) > 0)
您的程序使用双循环对结果进行排序,外循环迭代String
s,第二个循环迭代位于较小或相等索引的String
s作为当前外部索引并交换邻居元素,如果需要。这不是插入排序,因为您之前已经插入了元素。在阅读元素时,您需要执行内循环中的逻辑。
您是初学者,但不仅仅是Java。您需要编写结构化代码,并在您使用的方法之后阅读。