2

学校の宿題をしていて、Enum というものを発見しました。

宿題にとても役立つと思いました。

だから私はそれを使うことにしましたが、その後このエラーが現れました。

私はそれについてグーグルで検索しましたが、修正できないようです。

エラー「列挙体を挿入してコンパイルユニットを完成させます」が15番に表示されました

public enum TimeToClock {   

    9,9.5,
    10,10.5,
    11,11.5,
    12,12.5,
    13,13.5,
    14,14.5,
    15,15.5,
    16,16.5,
    17. 

}

これは、この質問のコードを改善する試みです

4

4 に答える 4

3

doubleの配列を使用します。

static final double[] timeToClock = {
    9,  9.5,
    10, 10.5,
    11, 11.5,
    12, 12.5,
    13, 13.5,
    14, 14.5,
    15, 15.5,
    16, 16.5,
    17
};

または@Puceが提案するリスト

static final List<Double> timeToClock = Arrays.asList(
    9,  9.5,
    10, 10.5,
    11, 11.5,
    12, 12.5,
    13, 13.5,
    14, 14.5,
    15, 15.5,
    16, 16.5,
    17
);
于 2012-12-04T14:59:09.953 に答える
1

問題は、列挙型の概念が定数のセットを格納するためだけに使用されるのではなく、定数のセットを使用することです。これは、何かを意味しますが、実際には列挙型のインスタンスであるため、floatを直接格納することはできません。

挿入するすべての数値には、次のような有効なJava変数名が必要です。

public enum TimeToClock {
  _9(9.0f),
  _9_5(9,5f)
  ;

  public final float value;

  public TimeToClock(float value) {
    this.value = value
  }
}

このようにして、でフィールドを参照できます。_9.valueこれが、特定の目的に列挙型を使用できる唯一の方法だと思います。他に使用できるもの:

  • 配列float[] values = new float[]{9f, 9.5f, .... };
  • などの定数public static final float _9_5 = 9.5f

列挙型を使用することは、すべての数値に意味を関連付けることができれば意味があります。状況によっては、許可されている値のセットに対して静的コンパイルチェックを行うことで問題なく使用できますが、ご覧のとおり、すべての値が価値。

于 2012-12-04T14:58:59.847 に答える
1

列挙型定数は適切な変数名である必要があり、Javaでは変数名を数字で始めることはできません。あなたは多分これを試すことができます:

public enum TimeToClock {    
  T9, T9_5,
  T10, T10_5
  // Go on
}
于 2012-12-04T14:59:08.333 に答える
0

enum整数はそれ自体では意味を持たないため、内部で整数を直接使用することはできません。

目標を達成するための最も簡単な方法であるため、ほとんどの人はStrings'を使用します。array

ただし、次のようにスケジュールをメソッド パラメータに渡したい場合を想像してください。

public void pronounceSchedule(String schedule){
   // Nothing ensures that a valid Schedule is passed !
}

列挙型を使用すると、期待される保証が得られます。

public void pronounceSchedule(TimeToClock timeToClock){
   // No need to validate the schedule since it is already assumed to be valid thanks to the compiler.
}

あなたが使用することができます:

public enum TimeToClock {
    NINE(9),
    NINE_AND_HALF(9.5f);
    // etc...

    TimeToClock(float schedule) {
        this.schedule = schedule;
    }

    public float getSchedule(){
        return schedule;
    }

    private float schedule;
}

ところで、どちらの方法も有効であり、コンテキストと目的によって異なります。

于 2012-12-04T15:02:58.857 に答える