1

次のデータフォームを保存するための適切なデータ構造は何ですか?

  1. 整数は最小数を表します
  2. 整数は最大数を表します
  3. 文字列にはメッセージが含まれています

そのため、result_numberがあれば、次のことができます-

  1. result_numberが最小数と最大数の間にあるかどうかを確認します
  2. 対応するメッセージを表示します

では、適切なデータ構造は何ですか?

4

3 に答える 3

7

あなたが望むように聞こえます...

(それを待つ...)

...2つの整数と1つの文字列を持つクラス。

public final class RangeValidation {
    private final int minimum;
    private final int maximum;
    private final String message;

    public RangeValidation(int minimum, int maximum, String message) {
        if (minimum > maximum) {
            throw new IllegalArgumentException("Invalid min/max combination");
        }
        if (message == null) {
            throw new NullPointerException();
        }
        this.minimum = minimum;
        this.maximum = maximum;
        this.message = message;
    }

    // You can tweak this API, of course...
    // it could throw an exception instead, or return an empty string for
    // success, etc.
    public String validate(int value) {
        return value < minimum || value > maximum ? mesasge : null;
    }
}

もちろん、これをより一般的な検証フレームワークなどに適合するインターフェイスを実装することもできますが、重要な点は、タイプに含めるものをすでにきちんと記述していることです。したがって、次のように記述する必要があります。それ。

maximumまた、これは値を包括的としてカウントすることに注意してください。空の範囲を表すことができるようにするために、値を排他的にすることをお勧めします。(それは、しかし有効な範囲を表すことを難しくしInteger.MAX_VALUEます...)

于 2012-10-10T19:46:38.070 に答える
3

Javaでは、「データ構造」はフィールドを持つクラスで表されます。クラスには、これらのフィールドを使用するメソッドが含まれる場合があります。

これを試して:

public class MyClass {

    private int min;
    private int max;
    private String message;

    public void testNumber(int number) {
        if (number >= min && number <= max) {
            System.out.println(message);
        }
    } 
}

フィールドの値を設定するコンストラクターが必要になる可能性があります。フィールドを作成することをお勧めしますfinal

于 2012-10-10T19:46:32.143 に答える
2

間隔の数が少ない場合は、class3つのメンバー(、、、および)でaをmin使用maxmessage、それらをリストに格納して、線形検索を実行します。

間隔の数が圧倒的であり、タイミング要件によって線形検索が禁止されている場合は、間隔ツリーを作成し、メッセージをそのリーフノードに関連付けます。

間隔が重なっていない場合は、両端のある間隔クラスを作成しTreeMap、左側の境界を使用して間隔オブジェクトをに格納して間隔を比較できます。これを手にすると、見つけようとしている番号に電話をかけ、返された間隔キーが探している値と重複していないかどうかを確認することでTreeMap、間隔をすばやく見つけることができます。floorEntry

于 2012-10-10T19:48:42.087 に答える