0

配列内の文字列がアルファベット順に配置されているかどうかを確認しています。私のコードチェッカーは、私のコードがいくつかのケースを説明できないと言っていますが、それを変更する方法が本当にわかりません.

編集:どうやら私のコードは、配列「cat ape dog zebra」をチェックすると「true」を返しますが、これは明らかにfalseです。

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

6 に答える 6

7
if (list.get(i).compareTo(list.get(j)) == 1)

上記の行は誤りです。戻り値は正であり、厳密には 1 ではありません。

に変更してみてください

if (list.get(i).compareTo(list.get(j)) >0)
于 2013-07-12T21:24:07.523 に答える
2

見た目よりもはるかに簡単です。リストを繰り返し処理し、隣接する要素が正しい順序になっているかどうかを確認するだけです。すべての隣接するペアが順番に並べられている場合、リスト全体が順番に並んでいます。

public boolean isSorted()
{
    for(int a=0;a<list.size()-1;a++)
    {
        if(list.get(a).compareTo(list.get(a+1))>0)
        {
            return false;
        }
    }
    return true;
}
于 2013-07-12T21:26:32.080 に答える
0

使い方String.compareTo()はとても簡単です。

String.compareTo() は、文字列がメソッドの引数の前にある場合は負の数を返し、同じ場合は 0 を返し、文字列がメソッドの引数の後にある場合は正の数を返します。

あなたがそれをした方法:

if (list.get(i).compareTo(list.get(j)) == 1)

非常に近いですが、そうあるべきです

if (list.get(i).compareTo(list.get(j)) > 0)

コンパレータと一緒に使用してすばやくソートするか、場合によってはソートされているかどうかを確認できます

boolean isSorted(String[] words) {

    for (int i = 0; i < words.length()-1; i++) {
        if (words[i].compareTo(words[i+1] >= 0) {
            return false;
        }
    }
    return true;
}

または、それらを並べ替えたい場合は、次のようにします。

Collections.sort(fooList,
             new Comparator<String>()
             {
                 public int compare(String s1, String s2)
                 {
                     return s1.compareTo(s2);
                 }        
             });

ソース

または true または false を返す

于 2013-07-12T21:23:34.860 に答える
0

私はそれがJavaの質問であることを知っていますが、Kotlinでこれを非常に簡潔に実装することになった方法は次のとおりです。

myList.zipWithNext { a, b ->
    if (a > b) {
         fail("Expected a sorted list, but $a > $b")
    }
}
于 2018-07-24T01:24:40.740 に答える