0
public static void getSort(short[] time, String[] champs){
    System.out.println("Time     Champs\n");
    for(int a= 0; a < time.length; a++){
        char Fletter=champs[a].charAt(0);
        if('B' == Fletter){
            Arrays.sort(champs);
            System.out.println(time[a] + "     " + champs[a]);
        }
    }
    for(int a= 0; a < time.length; a++){
        char Fletter=champs[a].charAt(0);
        if('C' == Fletter){
            Arrays.sort(champs);
            System.out.println(time[a] + "     " + champs[a]);
        }
    }
}

こんにちは、この機能に関するアドバイスとヘルプが必要です。私がやろうとしているのは、配列の時間とチャンピオンの中にあるものを出力して表示することです。

私の欲望の出力は次のとおりです。

Time----Champs

2001 Banana   

2004 Banana

2000 Boat

2003 Boat

2011 Carrot

2013 Carrot

2002 Cucumber

時間とチャンピオンが正しく表示されているところはアルファベット順に表示されていますしかし、私が使用するとArrays.sort(champs);

私の出力は次のとおりです。

Time----Champs

2004  Banana

2005  Banana

2006  Boat

2007  Boat

2008  Carrot

2009  Carrot

2010  Cucumber

champs の出力は正しく表示されますが、年は 1 ずつ下に表示されます。

そして、Arrays.sort(champs)私の出力なしでは次のとおりです。

Time----Champs

2000 Boat

2001 Banana  

2003 Boat

2004 Banana

2002 Cucumber

2011 Carrot

2013 Carrot

ご覧のとおり、チャンピオンの時間は正しいですが、アルファベット順にソートされていません.

4

4 に答える 4

2

あなたの問題は、「チャンピオン」で「時間」を並べ替えていないことだと思います。あなたの例から、「時間」は昇順の年であり、チャンピオンはその年のチャンピオンチームが誰であったかのように見えます。チャンピオンをアルファベット順に並べ替えると、時間と同期していません。

これを解決するには、Time と Champs を組み合わせて、いずれかの値でソートすると、もう一方の値も一緒に移動するようにする必要があります。

次のような内部クラスから始めます。

public static class Tuple implements Comparable<Tuple>{
    public short time;
    public String champ;

    public Tuple(short time, String champ) {
        this.time = time;
        this.champ = champ;
    }

    public int compareTo(Tuple other) {
        return this.champ.compareTo(other.champ);
    }
}

次に、現在のメソッドを変更してタプルの配列を作成します。

public static void getSort(short[] time, String[] champs){
   // assuming time.length & champ.length are the same
   Tuple[] timechamps = new Tuple[time.length];
   for (int a = 0; a < time.length; a++) {
     timechamps[a] = new Tuple(time[a], champs[a]);
   }

新しいタプルに Comparable を実装したので、単純に並べ替えることができます。タプルのcompareToメソッドは、アルファベット順に正しくソートされます。

   Arrays.sort(timechamps);

その後、結果を印刷できます

   for (Tuple t : timechamps) {
     System.out.println(t.time+"\t"+t.champ);
   }
 }
于 2013-04-18T05:59:40.813 に答える
1

ここを見てみたいですか http://www.mkyong.com/java/how-to-sort-a-map-in-java/

ここでキー -----> チャンプ 値 -> 時間

チャンピオンを短くしたいので、対応する値で時間を維持する必要があると思います。お役に立てば幸いです。

于 2013-04-18T05:58:06.200 に答える
0

クラスを作成し、Comparable メソッドを実装することをお勧めします。

public class TimeChamp implements Comparable<TimeChamp>{

private short time;
private String champs;

public short getTime() {
    return time;
}

public void setTime(short time) {
    this.time = time;
}

public String getChamps() {
    return champs;
}

public void setChamps(String champs) {
    this.champs = champs;
}

@Override
public int compareTo(TimeChamp o) {
    if(getChamps().compareTo(o.getChamps())==0)
    {
        if(getTime()<o.getTime())
            return -1;
        else
            return 1;
    }
    else
        return getChamps().compareTo(o.getChamps());
}
}

次に、このようにクラスでソートする関数を作成できます

public void getSort(TimeChamp[] timeChamp)
{
    Arrays.sort(timeChamp);
    for(int i=0;i<timeChamp.length;i++)
    {   
        System.out.print(timeChamp[i].getTime());
        System.out.print("            ");
        System.out.println(timeChamp[i].getChamps());
    }
}

編集:データセットを構築し、ソートメソッドを呼び出す、より説明的な回答を書く

import java.util.Arrays;


public class MainExample {

/**
 * @param args
 */
public static void main(String[] args) {
            //Construct data sets
    TimeChamp [] timeChampArray = new TimeChamp[3];
    TimeChamp timeChamp = new TimeChamp();
    timeChamp.setChamps("Boat");
    timeChamp.setTime((short)2001);
    timeChampArray[0]=timeChamp;
    timeChamp= new TimeChamp();
    timeChamp.setChamps("Banana");
    timeChamp.setTime((short)2000);
    timeChampArray[1]=timeChamp;
    timeChamp= new TimeChamp();
    timeChamp.setChamps("Banana");
    timeChamp.setTime((short)2001);
    timeChampArray[2]=timeChamp;
            //Call the sort method
    new MainExample().getSort(timeChampArray);
}
//the sorting method
public void getSort(TimeChamp[] timeChamp)
{
    Arrays.sort(timeChamp);
    for(int i=0;i<timeChamp.length;i++)
    {   
        System.out.print(timeChamp[i].getTime());
        System.out.print("            ");
        System.out.println(timeChamp[i].getChamps());
    }
}

}

于 2013-04-18T06:12:13.593 に答える