1

これは大学での任務のためです。コピーアンドペーストではなく、学習に役立つアドバイスと回答をお願いします。病院のERをシミュレートする必要がある割り当てがあります。ADTと優先キューの実装を練習することです。割り当ての条件の1つは、ERに来る患者の優先順位を助けると推測するcompareToメソッドを作成する必要があることを示しており、重大度の条件に基づいて決定されます。重大度が17より大きい場合は、17に置き換える必要があります。重大度が1より小さい場合は、1に置き換える必要があります...このcompreToと、2つのオブジェクトまたはintがどのように正確に比較されるかについてはまだ混乱しています:S...。私が以下に書いたことに基づいて、誰かが私に重大度を比較する方法を説明できますか?

これは、基本的な考え方を理解するための大まかな大まかなドラフトです。患者と呼ばれるオブジェクトがあり、名前と条件の重大度もあると思います。

//コンパレータメソッド..。

intの重大度

if(重大度> 17){

(患者の重症度>他の患者の重症度){return 1}の場合、重症度を17に置き換えます

else if(患者の重症度>他の患者の重症度){return -1} else if(患者の重症度==他の患者の重症度){return 0}}

else if(重大度<1){

(患者の重症度>他の患者の重症度){return 1}の場合、重症度を17に置き換えます

else if(患者の重症度>他の患者の重症度){return -1} else if(患者の重症度==他の患者の重症度){return 0}}

そうしないと {

(患者の重症度>他の患者の重症度){return 1}の場合、重症度を17に置き換えます

else if(患者の重症度>他の患者の重症度){return -1} else if(患者の重症度==他の患者の重症度){return 0}}

基本的に問題は、オブジェクトに属する2つのオブジェクトまたは2つの整数を比較するためにどのコードを使用するかです。優先キュー内で比較する項目が多い場合、コンパレータはどのように機能しますか。すべてのヘルプ/入力をありがとう!!!

4

2 に答える 2

1

Patientint変数を持つクラスがあるとしましょうseverity

「intをmin未満の場合はminとして扱い、maxed未満の場合はmaxとして扱う」操作は、クランプと呼ばれます。次のように、クランプヘルパー機能を作成すると便利な場合があります。

public static int clamp(int value, int min, int max)
{
   return value < min ? min : value > max ? max : value;
}

public int compareTo(Parent other)
{
    int clampedSeverity = clamp(this.severity, 1, 17);
    int clampedOtherSeverity = clamp(this.severity, 1, 17);
    //do comparisons
}

ここで、PriorityQueue-を作成するために、aのセマンティクスはPriorityQueue、最も高い比較要素(この場合は最も高い重大度)が先頭になるように、任意の挿入で自動的にソートされるコレクションのセマンティクスです。

したがって、に挿入するにはPriorityQueuePriorityQueueたとえば「backed」を使用しArrayListて、それを使用してバイナリ検索をcompareTo行い、より高く、より低く、または一致するものがあるかどうかを確認します。一致するものがあれば、そこに挿入できます。一致するものが得られないが、下の要素よりも厳しく、上の要素よりも厳しいものに絞り込んだ場合は、そこに挿入できます。

すべての挿入物がPriorityQueueソートされたままである場合、最も重症の患者が常に一番上になります。

于 2013-03-14T23:04:36.440 に答える
1

生の重大度を「正規化された」重大度(つまり、1から17の間の重大度)で変換するメソッドを作成することから始める必要があります。次に、正規化されたセキュリティで患者を比較する必要があります。

private int normalizedSeverity(int severity) {
    if (severity < 1) {
        return 1;
    }
    if (severity > 17) {
        return 17;
    }
    return severity;
}

public int compare(Patient p1, Patient p2) {
    int severity1 = normalizedSeverity(p1.getSeverity());
    int severity2 = normalizedSeverity(p2.getSeverity());
    return Integer.compare(severity1, severity2);
}
于 2013-03-14T23:05:58.077 に答える