5

配列リストがソートされているかどうかを見積もる必要があります (ソートしないでください)。

文字列を並べ替えると、アルファベット順に並べられます。compareTo()メソッドを使用して、どの文字列が最初に来るかを判断しようとしています

配列リストがソートされている場合は true、そうでない場合は false を返します。

コード:

public boolean isSorted()
{
    boolean sorted = true;        
    for (int i = 1; i < list.size(); i++) {
        if (list.get(i-1).compareTo(list.get(i)) != 1) sorted = false;
    }

    return sorted;
}

簡単なテスト:

    ArrayList<String> animals = new ArrayList<String>();
    ArrayListMethods zoo = new ArrayListMethods(animals); 
    animals.add("ape");
    animals.add("dog");
    animals.add("zebra");

    //test isSorted
    System.out.println(zoo.isSorted());
    System.out.println("Expected: true");

    animals.add("cat");
    System.out.println(zoo.isSorted());
    System.out.println("Expected: false");

    animals.remove("cat");
    animals.add(0,"cat");
    System.out.println(zoo.isSorted());
    System.out.println("Expected: false");

    **Output:**
    false
    Expected: true
    false
    Expected: false
    false
    Expected: false

この簡単なテストでは、1/3カバレッジのみが表示されます。

この問題を解決する方法。

4

6 に答える 6

9

メソッドに小さなバグがあります。する必要があります:

public boolean isSorted()
{
    boolean sorted = true;        
    for (int i = 1; i < list.size(); i++) {
        if (list.get(i-1).compareTo(list.get(i)) > 0) sorted = false;
    }

    return sorted;
}

>0の代わりに!=1、 が返されることを確認できません1..

于 2013-07-06T06:44:38.020 に答える
3

条件を変更:

if (list.get(i - 1).compareTo(list.get(i)) >0)

>0の代わりにチェックする必要があり!=-1ます。

compareTo()のドキュメントに目を通す

引数文字列がこの文字列と等しい場合は値 0。この文字列が文字列引数より辞書的に小さい場合は 0 より小さい値。この文字列が文字列引数よりも辞書的に大きい場合は、0 より大きい値。

于 2013-07-06T06:47:23.723 に答える