0

对于我的任务,我必须创建一个方法来对存储在对象类中的整数和字符串进行排序。请记住,我必须使用演员表。我想使用泛型,但我的老师坚持使用 1.4.2(没有泛型)。我可以对时间进行排序,对于字母排序,我使用我的方法对时间进行排序并添加了一个 compareTo。我玩了一下,但是当我输出它时,它会按照我输入的顺序给我输入的所有内容。不按字母顺序。

这是我为存储输入而创建的类:

public class showInfo 
{
    String name;
    String day; 
    int time;    
}

以下是按名称排序的方法!

//method to sort and display info
public static void sortName(){          
    for(int i = 0; i < show.size() - 1; i++) {
        for(int j = 0; j < show.size() - 1; j++){
            if(((showInfo)show.get(i)).name.compareTo(((showInfo)show.get(i+1)).name) > 0){
                showInfo temp = new showInfo();
                temp.name = ((showInfo)show.get(j)).name;
                temp.day = ((showInfo)show.get(j)).day;
                temp.time = ((showInfo)show.get(j)).time;

                ((showInfo)show.get(j)).time = ((showInfo)show.get(i)).time;
                ((showInfo)show.get(j)).day = ((showInfo)show.get(i)).day;
                ((showInfo)show.get(j)).name = ((showInfo)show.get(i)).name;

                ((showInfo)show.get(i)).time = temp.time;
                ((showInfo)show.get(i)).day = temp.day;
                ((showInfo)show.get(i)).name = temp.name;
            }
        } 
    } 

任何帮助都会很棒!提前致谢。:)

(PS。我知道我需要将“showInfo”更改为“ShowInfo”,但我会在完成后进行。)

4

5 回答 5

3

您的代码的一个问题是您正在与 进行比较show.get(i)show.get(i+1)然后show.get(i)show.get(j). 您应该与show.get(j). 此外,内部循环应该转到j < show.size()而不是show.size() - 1. 最后,您可以开始内循环 ati + 1而不是 at 0

一旦确定需要交换,您可以通过简单地交换列表中的引用而不是交换每个字段来做得更好:

showInfo tmp = (showInfo)show.get(i);
show.set(i, show.get(j));
show.set(j, tmp);
于 2013-09-17T16:42:09.747 回答
1

我假设show是 aList并且您必须按name.

首先,showInfo实现Comparable

public class showInfo implements Comparable
{
    String name;
    String day; 
    int time;

    public int compareTo(Object o)
    {
        showInfo other = (showInfo) o;
        return name.compareTo(other.name);
    }  
}

然后,在列表中使用`Collections.sort()'

Collections.sort(show);
于 2013-09-17T16:38:51.713 回答
0

你可以做这样的事情......

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

class myComparator implements Comparator {

    public int compare(Object o1, Object o2) {
        return ((o1.toString().charAt(0) > o2.toString().charAt(0)) ? 1 : (o1
                .toString().charAt(0) == o2.toString().charAt(0)) ? 0 : -1);
    }
}

public class Sample {

    /**
     * @param args
     */
    public static void main(String[] args) {
        List l = new ArrayList();
        l.add("hello");
        l.add("abc");
        l.add("World");
        l.add("hi");

        System.out.println("Before sorting");
        for (Object i : l) {
            System.out.println(i.toString());
        }

        Collections.sort(l, new myComparator());

        System.out.println("After sorting");
        for (Object i : l) {
            System.out.println(i.toString());
        }

    }

}
于 2013-09-17T17:12:48.690 回答
0

不确定这是否是您要寻找的,它使用强制转换而不是泛型,无论如何,我希望这会有所帮助

糊盒

于 2013-09-17T18:03:03.363 回答
0

您在i这里错误地使用:

if(((showInfo)show.get(i)).name.compareTo(((showInfo)show.get(i+1)).name) > 0){

我相信第二个i应该是j实现冒泡排序

if(((showInfo)show.get(i)).name.compareTo(((showInfo)show.get(j+1)).name) > 0){ 
于 2013-09-17T16:42:21.713 回答