0

基本的に、2 つの double 値があるとします。

 import javax.swing.JSpinner;
 import javax.swing.SpinnerNumberModel;


public class UI  {
    public static void main(String args[]){
        JSpinner stonesSpinnerImperial;
        JSpinner poundsSpinnerImperial;

        stonesSpinnerImperial = new JSpinner();
        poundsSpinnerImperial = new JSpinner();

        stonesSpinnerImperial.setModel(new SpinnerNumberModel(3, 3, 31, 1));
        poundsSpinnerImperial.setModel(new SpinnerNumberModel(0.0, 0.0, 13.0, 1.0));

        double imperial_stones = (double) stonesSpinnerImperial.getModel().getValue();
        double imperial_pounds = (double) poundsSpinnerImperial.getModel().getValue();
        double total_imperial_weight =  imperial_stones + imperial_pounds;

    }
}

ただし、次のエラーが表示されます: java.lang.Integer を java.lang.Double にキャストできません

この背後にある私の論理には欠陥があると感じており、この問題に関する支援があれば大歓迎です.

編集:必要と思われる限り追加しました。

4

3 に答える 3

3

なぜ単純にしないのですか:

  double imperial_stones = (Integer)stonesSpinnerImperial.getModel().getValue();
  double imperial_pounds = (Double) poundsSpinnerImperial.getModel().getValue();
  double total_imperial_weight = imperial_stones + imperial_pounds;

返されたオブジェクトは、プリミティブ クラスではなく数値ラッパー クラスにキャストする必要があることに注意してください。

于 2012-04-30T01:42:13.920 に答える
3

SpinnerNumberModelを受け入れる を使用します。内部doubleで使用します。Double例えば、

new SpinnerNumberModel(3d, 3d, 31d, 1d)

補遺: 更新されたコードに基づいて、にキャストすることを検討してくださいNumber

    double imperial_stones =
        ((Number)stonesSpinnerImperial.getModel().getValue()).doubleValue();
    double imperial_pounds =
        ((Number)poundsSpinnerImperial.getModel().getValue()).doubleValue();
于 2012-04-30T01:42:49.453 に答える
3

によって返される動的な型stonesSpinnerImperial.getModel().getValue()が であり、Integerそれを にキャストしようとするとDouble、 が得られますClassCastException

java.lang.Integer は java.lang.Double にキャストできません

あなたの場合、動的型は、Integer整数を受け入れるコンストラクターを使用しているためです。double を受け入れるコンストラクターを使用するか、計算を整数演算に制限してください。

于 2012-04-30T01:42:56.790 に答える