Java 按字母顺序对字符串排序

Java 按字母顺序对字符串排序,java,sorting,Java,Sorting,下面的代码可以编译,但是sortTitles()方法并没有按字母顺序对电影的标题进行排序。如何修复compareTo()和sortTitles()方法 电影2级 public class Movie2 implements Comparable<Movie2> { // instance variables private String title; private int year; private String studio; publ

下面的代码可以编译,但是sortTitles()方法并没有按字母顺序对电影的标题进行排序。如何修复compareTo()和sortTitles()方法

电影2级

public class Movie2 implements Comparable<Movie2> {
    // instance variables 
    private String title;
    private int year;
    private String studio;

    public Movie2(String title, int year, String studio) {
        // initialise instance variables
        this.title = title;
        this.year = year;
        this.studio = studio;
    }

    public String toString() {
        String listing;
        listing = title + ", " + year + ", " + studio;

        return listing;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getTitle() {
        return title;
    }

    public void setYear(int year) {
        this.year = year;
    }

    public int getYear() {
        return year;
    }

    public void setStudio(String studio) {
        this.studio = studio;
    }

    public String getStudio() {
        return studio;
    }

    public int compareTo(Movie2 obj) {
        if (title < obj.getTitle()) {
            return -1;
        }
        else {
            return 1;
        }
    }
}
public class TestMovie2 {
    public static void main(String[] args) {
        Movie2[] myMovies = new Movie2[10];
        Movie2[] sorted = new Movie2[10];

        myMovies[0] = new Movie2("The Muppets Take Manhattan", 2001, "Columbia Tristar");
        myMovies[1] = new Movie2("Mulan Special Edition", 2004, "Disney");
        myMovies[2] = new Movie2("Shrek 2", 2004, "Dreamworks");
        myMovies[3] = new Movie2("The Incredibles", 2004, "Pixar");
        myMovies[4] = new Movie2("Nanny McPhee", 2006, "Universal");
        myMovies[5] = new Movie2("The Curse of the Were-Rabbit", 2006, "Aardman");
        myMovies[6] = new Movie2("Ice Age", 2002, "20th Century Fox");
        myMovies[7] = new Movie2("Lilo & Stitch", 2002, "Disney");
        myMovies[8] = new Movie2("Robots", 2005, "20th Century Fox");
        myMovies[9] = new Movie2("Monsters Inc.", 2001, "Pixar");

        System.out.println("  Movies ");
        System.out.println("______________________________");
        System.out.println();
        printMovies(myMovies);
        System.out.println();
        System.out.println();

        Movie2[] dest = new Movie2[myMovies.length];
        sortTitles(myMovies, dest);

        System.out.println(" Sorted by title - ascending ");
        System.out.println("______________________________");
        System.out.println();
        printMovies(myMovies);
        System.out.println();
        System.out.println();

        sortYears(myMovies, sorted);
        System.out.println(" Sorted by year - descending");
        System.out.println("______________________________");
        System.out.println();
        printMovies(sorted);
        System.out.println();
        System.out.println();
    }

    public static void sortTitles(Movie2[] myMovies, Movie2[] dest) {
        for (int i = 0; i < myMovies.length; i++) {
            Movie2 next = myMovies[i];
            int insertIndex = 0;
            int k = i;
            while (k > 0 && insertIndex == 0) {
                if (myMovies[k].getTitle().compareTo(dest[k - 1].getTitle()) < 1) {
                    insertIndex = k;
                }
                else {
                    dest[k] = dest[k - 1];
                }
                k--;
            }
            dest[insertIndex] = next;
        }
    }

    public static void printMovies(Movie2[] sorted) {
        for (int i = 0; i < sorted.length; i++)
            System.out.println(sorted[i]);
    }

    public static void sortYears(Movie2[] myMovies, Movie2[] sorted) {
        for (int i = 0; i < myMovies.length; i++) {
            Movie2 next = myMovies[i];
            int insertindex = 0;
            int k = i;
            while (k > 0 && insertindex == 0) {
                if (next.getYear() < sorted[k - 1].getYear()) {
                    insertindex = k;
                }
                else {
                    sorted[k] = sorted[k - 1];
                }
                k--;
            }
            sorted[insertindex] = next;
        }
    }
}
public class Movie2实现可比性{
//实例变量
私有字符串标题;
私人国际年;
私人弦乐工作室;
公共电影2(字符串标题、整数年、字符串工作室){
//初始化实例变量
this.title=标题;
今年=年;
this.studio=studio;
}
公共字符串toString(){
字符串列表;
列表=标题+”,“+年份+”,“+工作室;
返回列表;
}
公共无效集合标题(字符串标题){
this.title=标题;
}
公共字符串getTitle(){
返回标题;
}
公共年(国际年){
今年=年;
}
公共int getYear(){
回归年;
}
公共void setStudio(字符串工作室){
this.studio=studio;
}
公共字符串getStudio(){
回归演播室;
}
公共国际比较(电影2 obj){
if(title
TestMovie2类

public class Movie2 implements Comparable<Movie2> {
    // instance variables 
    private String title;
    private int year;
    private String studio;

    public Movie2(String title, int year, String studio) {
        // initialise instance variables
        this.title = title;
        this.year = year;
        this.studio = studio;
    }

    public String toString() {
        String listing;
        listing = title + ", " + year + ", " + studio;

        return listing;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getTitle() {
        return title;
    }

    public void setYear(int year) {
        this.year = year;
    }

    public int getYear() {
        return year;
    }

    public void setStudio(String studio) {
        this.studio = studio;
    }

    public String getStudio() {
        return studio;
    }

    public int compareTo(Movie2 obj) {
        if (title < obj.getTitle()) {
            return -1;
        }
        else {
            return 1;
        }
    }
}
public class TestMovie2 {
    public static void main(String[] args) {
        Movie2[] myMovies = new Movie2[10];
        Movie2[] sorted = new Movie2[10];

        myMovies[0] = new Movie2("The Muppets Take Manhattan", 2001, "Columbia Tristar");
        myMovies[1] = new Movie2("Mulan Special Edition", 2004, "Disney");
        myMovies[2] = new Movie2("Shrek 2", 2004, "Dreamworks");
        myMovies[3] = new Movie2("The Incredibles", 2004, "Pixar");
        myMovies[4] = new Movie2("Nanny McPhee", 2006, "Universal");
        myMovies[5] = new Movie2("The Curse of the Were-Rabbit", 2006, "Aardman");
        myMovies[6] = new Movie2("Ice Age", 2002, "20th Century Fox");
        myMovies[7] = new Movie2("Lilo & Stitch", 2002, "Disney");
        myMovies[8] = new Movie2("Robots", 2005, "20th Century Fox");
        myMovies[9] = new Movie2("Monsters Inc.", 2001, "Pixar");

        System.out.println("  Movies ");
        System.out.println("______________________________");
        System.out.println();
        printMovies(myMovies);
        System.out.println();
        System.out.println();

        Movie2[] dest = new Movie2[myMovies.length];
        sortTitles(myMovies, dest);

        System.out.println(" Sorted by title - ascending ");
        System.out.println("______________________________");
        System.out.println();
        printMovies(myMovies);
        System.out.println();
        System.out.println();

        sortYears(myMovies, sorted);
        System.out.println(" Sorted by year - descending");
        System.out.println("______________________________");
        System.out.println();
        printMovies(sorted);
        System.out.println();
        System.out.println();
    }

    public static void sortTitles(Movie2[] myMovies, Movie2[] dest) {
        for (int i = 0; i < myMovies.length; i++) {
            Movie2 next = myMovies[i];
            int insertIndex = 0;
            int k = i;
            while (k > 0 && insertIndex == 0) {
                if (myMovies[k].getTitle().compareTo(dest[k - 1].getTitle()) < 1) {
                    insertIndex = k;
                }
                else {
                    dest[k] = dest[k - 1];
                }
                k--;
            }
            dest[insertIndex] = next;
        }
    }

    public static void printMovies(Movie2[] sorted) {
        for (int i = 0; i < sorted.length; i++)
            System.out.println(sorted[i]);
    }

    public static void sortYears(Movie2[] myMovies, Movie2[] sorted) {
        for (int i = 0; i < myMovies.length; i++) {
            Movie2 next = myMovies[i];
            int insertindex = 0;
            int k = i;
            while (k > 0 && insertindex == 0) {
                if (next.getYear() < sorted[k - 1].getYear()) {
                    insertindex = k;
                }
                else {
                    sorted[k] = sorted[k - 1];
                }
                k--;
            }
            sorted[insertindex] = next;
        }
    }
}
公共类TestMovie2{
公共静态void main(字符串[]args){
电影2[]我的电影=新电影2[10];
电影2[]已排序=新电影2[10];
myMovies[0]=新电影2(“木偶占领曼哈顿”,2001年,“哥伦比亚三星”);
myMovies[1]=新电影2(“木兰特别版”,2004年,“迪斯尼”);
myMovies[2]=新电影2(“史莱克2”,2004年,“梦工厂”);
myMovies[3]=新电影2(“不可思议的人”,2004年,“皮克斯”);
myMovies[4]=新电影2(“麦克菲保姆”,2006年,“环球”);
myMovies[5]=新电影2(“野兔的诅咒”,2006年,“阿德曼”);
myMovies[6]=新电影2(“冰河世纪”,2002年,“20世纪福克斯”);
myMovies[7]=新电影2(“Lilo&Stitch”,2002年,“迪斯尼”);
myMovies[8]=新电影2(“机器人”,2005年,“20世纪福克斯”);
myMovies[9]=新电影2(“怪物公司”,2001年,“皮克斯”);
System.out.println(“电影”);
System.out.println(“\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu”);
System.out.println();
印刷电影(myMovies);
System.out.println();
System.out.println();
Movie2[]dest=新电影2[myMovies.length];
分类(myMovies,dest);
System.out.println(“按标题排序-升序”);
System.out.println(“\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu”);
System.out.println();
印刷电影(myMovies);
System.out.println();
System.out.println();
(我的电影,分类);
System.out.println(“按年份递减排序”);
System.out.println(“\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu”);
System.out.println();
印刷电影(分类);
System.out.println();
System.out.println();
}
公共静态无效排序(Movie2[]myMovies,Movie2[]dest){
for(int i=0;i0&&insertIndex==0){
if(myMovies[k].getTitle().compareTo(dest[k-1].getTitle())<1){
插入指数=k;
}
否则{
dest[k]=dest[k-1];
}
k--;
}
dest[insertIndex]=下一步;
}
}
公共静态电影(电影2[]已排序){
for(int i=0;i0&&insertindex==0){
if(next.getYear()
使用已定义的比较器作为字符串的方法,如:

public int compareTo(Movie2 obj) { 
    return this.getTitle().compareTo(obj.getTitle());
}
在Sortitles方法中,使用

Arrays.sort(myMovies);//you dont need seperate dest array
使用方法作为

public int compareTo(Movie2 obj)
{
    if (title != null)
        return title.compareTo(obj.getTitle());
    else
        return obj.getTitle() == null ? 0 : -1;
}

Java不支持运算符重载。因此,不能将
String
s与关系运算符进行比较。你应该在那里得到一个编译时错误。

首先在
Movie2
中修复你的
compareTo
方法(你可能已经完成了,或者它甚至不会编译):

然后您的
TestMovie2
中的
sortTitles
方法:

    public static void sortTitles(Movie2[] myMovies, Movie2[] dest)
    {
        for (int i = 0; i < myMovies.length; i++)
            {
                Movie2 next = myMovies[i];
                int insertIndex = 0;
                int k = i;
                while (k>0 && insertIndex == 0)
                    {
                        if (next.getTitle().compareTo(dest[k-1].getTitle()) > -1)
                            {
                                System.out.println("less than or equal");
                                insertIndex = k;
                            }
                        else 
                            {
                                System.out.println("greater than");
                                dest[k] = dest[k-1]; 
                            }
                        k--;
                    }
                dest[insertIndex] = next;
            } 
    }

为什么要用关系运算符与字符串对象进行比较?此外,您正在命名与现有方法相同的方法。因此,在您的情况下,代码没有从
TestingMovie2
类调用方法。它正在调用默认的
java.lang.String
方法。更改名称并使用String类的comapreTo方法。将方法的修改为:

public int movieCompareTo(Movie2 obj)
{ 
  if (title.comapreTo(obj.getTitle()) < 0)
    return -1;
  else 
    return 1; 
}
public int movieCompareTo(Movie2 obj)
{ 
if(title.comapreTo(obj.getTitle())<0)
返回-1;
其他的
返回1;
}
comapreTo方法:(来自JavaDoc)

  • 此字符串对象表示的字符序列按字典顺序与参数字符串表示的字符序列进行比较
  • 如果此字符串对象按字典顺序位于参数字符串之前,则结果为负整数
  • 如果此字符串对象按字典顺序跟随参数字符串,则结果为正整数
  • 如果字符串相等,则结果为零
“以下代码编译”不,它不
if(tit