0

配列の並べ替えで問題が発生しています。月曜日、火曜日、水曜日、木曜日、または金曜日のいずれかの日で配列を並べ替えたいと考えています。配列内のすべてを表示するクラスがありますが、上記の日数までに注文したいのですが、どうすればよいですか?

collections.sort と Arrays.sort を使用してみましたが、望ましい効果が得られないようです。アイデアはありますか?

public void sortArray() {



}

04-23 12:55:49.010: E/AndroidRuntime(281): 致命的な例外: メイン 04-23 12:55:49.010: E/AndroidRuntime(281): java.lang.RuntimeException: アクティビティ ComponentInfo{org を開始できません。 assignment.timetable/org.assignment.timetable.Timetable}: java.lang.NullPointerException 04-23 12:55:49.010: E/AndroidRuntime(281): android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) で 04 -23 12:55:49.010: E/AndroidRuntime(281): android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 04-23 12:55:49.010: E/AndroidRuntime(281): android.app で.ActivityThread.access$2300(ActivityThread.java:125) 04-23 12:55:49.010: E/AndroidRuntime(281): android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 04-23 12: 55:49.010: E/AndroidRuntime(281): android.os.Handler.dispatchMessage(Handler.java:99) 04-23 12:55:49.010:E/AndroidRuntime(281): android.os.Looper.loop(Looper.java:123) 04-23 12:55:49.010: E/AndroidRuntime(281): android.app.ActivityThread.main(ActivityThread.java) :4627) 04-23 12:55:49.010: E/AndroidRuntime(281): java.lang.reflect.Method.invokeNative(ネイティブ メソッド) 04-23 12:55:49.010: E/AndroidRuntime(281): at java.lang.reflect.Method.invoke(Method.java:521) 04-23 12:55:49.010: E/AndroidRuntime(281): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java で:868) 04-23 12:55:49.010: E/AndroidRuntime(281): com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 04-23 12:55:49.010: E/AndroidRuntime (281): dalvik.system.NativeStart.main(Native Method) 04-23 12:55:49.010: E/AndroidRuntime(281): 原因: java.lang.NullPointerException 04-23 12:55:49.010: E /AndroidRuntime(281): org.assignment.timetable.Timetable$MyComparator.compare(Timetable.java:51) 04-23 12:55:49.010: E/AndroidRuntime(281): org.assignment.timetable.Timetable$MyComparator.compare(Timetable.java:1) 04-23 12:55:49.010: E/AndroidRuntime(281): java.util.TimSort.countRunAndMakeAscending(TimSort.java:320) 04-23 12:55:49.010: E/AndroidRuntime(281): java.util.TimSort で.sort(TimSort.java:185) 04-23 12:55:49.010: E/AndroidRuntime(281): java.util.TimSort.sort(TimSort.java:169) 04-23 12:55:49.010: E /AndroidRuntime(281): java.util.Arrays.sort(Arrays.java:1907) 04-23 12:55:49.010: E/AndroidRuntime(281): java.util.Collections.sort(Collections.java: 1972) 04-23 12:55:49.010: E/AndroidRuntime(281): org.assignment.timetable.Timetable.sortModules(Timetable.java:71) 04-23 12:55:49.010: E/AndroidRuntime(281) : org.assignment.timetable.Timetable.onCreate(Timetable.java:40) 04-23 12:55:49.010: E/AndroidRuntime(281): android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 04-23 12:55:49.010: E/AndroidRuntime(281): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 04-23 12:55:49.010: E/AndroidRuntime(281): ... 11 もっと見る

4

2 に答える 2

2

次に例を示します。

    //Assuming that the Module-class has the day stored as a String named "day"
static class MyComparator implements Comparator<Module>{
    private final static HashMap<String, Integer> order = getMap();

    @Override
    public int compare(Module lhs, Module rhs){
        int leftOrder = order.get(lhs.day.toLowerCase());
        int rightOrder = order.get(rhs.day.toLowerCase());
        return leftOrder - rightOrder;
    }

    private final static HashMap<String, Integer> getMap(){
        HashMap<String, Integer> res = new HashMap<String, Integer>();
        res.put("monday",0);
        res.put("tuesday",1);
        res.put("wednesday",2);
        res.put("thursday",3);
        res.put("friday",4);

        return res;
    }
}

そして、配列を(好きなように)作成したら、次のように並べ替えることができます。

Arrays.sort(myArray, new MyComparator());

または、リストがある場合:

Collections.sort(myList, new MyComparator());

これで、配列内のアイテムが並べ替えられます。

于 2012-04-23T11:40:44.783 に答える
1
public WeekComparator implements Comparator {
private String[] weeksdays = {"monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"};
public int compare(Object o1, Object o2) {
  if(!(o1 instanceof String && o2 instanceof String)) {
    throw new ClassCastException();
  }
  int day1 = indexOfDay((String)o1);
  int day2 = indexOfDay((String)o2);
  if(day1==day2) return 0;
  return (day1>day2 ? 1 : -1);
}

private int indexOfDay(String s) {
  for(int i = 0 ; i < weekdays.length;i++) {
    if(weekdays[i].equalsIgnoreCase(s)) return i;
  return 10;
}

}

私はこれをテストしていませんが、動作するはずです..紙の上で(ええと...画面)

于 2012-04-23T11:35:48.337 に答える