4

配列が昇順か降順かを確認するコードを書いています。ブール値の「昇順」が true の場合、昇順かどうかを確認します。false の場合は、降順をチェックします。配列が降順かどうかを確認するのに助けが必要です...以下に書かれている昇順を確認するコードがあります:

protected boolean isSorted(boolean ascending) {
    boolean result = false; 

    if (ascending) { 
        for (int i=0;i<data.length-1;i++) {
            if(data[i] < data[i+1]) {
                result = true;
            } else if(data[i] > data[i+1]) {
                result = false;
            }
        }
    } else {
        //code to check for descending order
    }
}
4

3 に答える 3

12

(「昇順」チェック)の最初の部分ifが間違っています。次のようにする必要があります。

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

逆に、降順チェックは次のようになります (比較演算子の方向を変更するだけで十分であることに注意してください)。

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

どちらの場合も、昇順または降順のプロパティを保持しない数値のペアを1 つtrue見つけたらすぐにループを抜け出す必要があり、ループが終了した後にのみ戻ります。

于 2013-08-01T22:06:58.080 に答える
3

必要に応じて、1つのループでチートして実行し、追加を1つ削除できます。

protected boolean isSorted(boolean ascending) {
    for (int i = 1; i < data.length; i++) {
        if (data[i-1] == data[i]) {
            continue;
        }
        if ((data[i-1] > data[i]) == ascending) {
            return false;
        }
    }
    return true;
}

注:私は@OscarLopezによるコードに基づいて構築しているので、私のものに賛成票を投じる場合は彼に賛成票を投じてください。

于 2013-08-01T22:41:39.287 に答える