簡體   English   中英

按字母順序對對象進行排序

[英]Sorting objects in alphabetical order

對於我的作業,我必須創建一個方法來對存儲在對象類中的整數和字符串進行排序。 請記住,我必須使用CASTS。 我想使用泛型,但是我的老師使用1.4.2(沒有泛型)對我進行INSISTTS。 我可以對時間進行排序,對於字母排序,我使用我的方法對時間進行排序並添加了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”,但是我會在完成后執行。)

代碼的一個問題是,您正在將show.get(i)show.get(i+1) ,然后將show.get(i)show.get(j)進行交換。 您應該將其與show.get(j)進行比較。 另外,內部循環應轉到j < show.size()而不是show.size() - 1 最后,您可以從i + 1而不是0開始內部循環。

一旦確定需要交換,您可以通過交換列表中的引用而不是交換每個字段來做得更好:

showInfo tmp = (showInfo)show.get(i);
show.set(i, show.get(j));
show.set(j, tmp);

我認為show是一個List ,您必須按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);

您在這里錯誤地使用了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){ 

你可以做這樣的事情。

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());
        }

    }

}

不知道這是否是您要查找的內容,無論如何,它使用強制轉換而不是泛型 ,希望對您有所幫助

引擎收錄

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM