-4

私はこの種の問題を抱えています。最初のファイルのみが順番に正しく表示されます。誰かが私が間違っているのを見ますか?私は何時間もそれを理解しようとしてきましたが、私が間違っていることがわかりません。

public void sort() { 

    int i; //loop control
    int last; //last position in the arraylist
    int max; //position where last alphabetical filename is found

    max = 0; //largest position so far is first, since i haven't checked

    //I thought i should start at the end and work my way down
    for(last = fileList.size()-1; last >= 0; last--) {

        for(i = 0; i < fileList.size(); i++) {
            if(fileList.get(max).getFileName().compareTo(fileList.get(i).getFileName()) > 0)
                max = i;
        }

        //swap pixfile in last position with the last alphabetical
        Pixfile tempPix = fileList.get(last);
        fileList.set(last, fileList.get(max));
        fileList.set(max, tempPix);
        //i thought i would repeat until last = 0 and the arraylist is sorted
    }//end for

}
4

1 に答える 1

1

内側のforループはfor(int i = 0; i <= last; i++)、まだソートされていないものから最良のものを選択しているためです。最後に、外側のループの前の反復ですでにソートしたすべてのもの。

また、各反復での値をリセットしないmaxため、内側のforループの前に次のように記述します。max = 0;

また、並べ替えアルゴリズムを作成するのが面倒な場合は、いつでもArrays.sort()またはCollections.sort()

于 2013-03-21T01:52:32.437 に答える