0

そこで、従業員オブジェクトとドライバーを作成しました。ドライバには Employees の ArrayList が含まれており、この特定のメソッドは名前がアルファベット順に最初に来る Employee を返します。

2 つの従業員を ArrayList 'staff' に追加して、それらを "a" と "z" と呼びましょう。

何らかの理由で、従業員「a」を返すと予想される場合、常に従業員「z」を返します。compareTo メソッドを正しく使用していますか、それともまったく別のものですか?

 public Employee first()
    {
        int guy = 0;


        for ( int x = 1 ; x < staff.size() ; x ++ )
        {
            if ( staff.get( x -1 ) instanceof Employee && staff.get( x - 1 ).getName().compareTo( staff.get( x ).getName() ) < 0 )
                guy = x - 1;
        }

        return ( (Employee) staff.get( guy ) );
    }
4

1 に答える 1

2

車輪の再発明をする必要はありません。カスタムコンパレータを使用し、Collections並べ替え方法を使用します。

public class NameComparator implements Comparator<Employee> {
    @Override
    public int compare(Employee o1, Employee o2) {
        return o1.getName().compareTo(o2.getName());
    }
}

Collections.sort(yourArrayList, new NameComparator());

Employeeまたは、クラスが実装されていることを確認し、Comparable<Employee>上記のカスタムコンパレータなしで実行できます。これは、名前に基づいて比較したいだけであることを前提としています。

于 2013-02-17T07:26:06.873 に答える