簡體   English   中英

添加 integer 並在 java 中加倍

[英]Adding integer and double in java

我正在學校從事 JavaFX 項目,目前我遇到了一個問題。 我想添加在 class 中定義的一些數字的總和(參見 class Add),它們既有雙精度又有 integer。 目前我的代碼沒有編譯。

public class Add {
    
    private double numdob;
    private int numint;
    
    
    public void setNumdob(double numdob) {
        this.numdob = numdob;
    }
    
    public void setNumint(int numint) {
        this.numint = numint;
    }
    
    public double getNumdob() {
        return numdob;
    }
    
    public double getNumint() {
        return numint;
    }

    
    public double calculateSum() {
        double numdob = 10.0*getNumdob();
        int numint = (int) (3.31*getNumint());
        
        double total = numdob + numint;
        return total;
    }
}

我正在嘗試在控制器(javaFX)中使用該方法,我已經實現了這樣的方法:(我已經初始化並定義了上面的 class)

    private Add add;

    @FXML
    public void initialize() {
        add = new Add();

    @FXML
    public void calculate() {
        try {
            double numdob = Double.parseDouble(double.getText());
            int numint = Integer.parseInt(integer.getText());
            
            
            add.setNumdob(numdob);
            add.setNumint(numint);

            
            double totalSum = add.calculateSum();
            
            output.setText("The sum is " + totalSum);
            
            
        } catch (Exception e) {
            outputCustoms.setText( e.getMessage());
        }
    }

您沒有聲明(或向我們展示?)變量,例如integeroutput

另一個小問題是這樣的:

    public double getNumint() {
        return numint;
    }

... 應該返回int而不是 double。

修改后的代碼

我修改了你的代碼。 我的更改包括:

  • 將 class 重命名為Add尚不清楚。 鑒於您對問題域的了解,我希望您可以使用 devise 比我的CalcPair更好的名稱。
  • 使 class 不可變。 通常最好將 go 不可變,直到確定需要可變性。 在這種情況下,實例化一個新的CalcPair就像調用 setter 和重新計算一樣簡單和容易——所以可變是沒有意義的。
  • 緩存計算結果。 在構造函數中執行計算,並保存到成員字段。
  • 添加了對Math.toIntExact( long value )的調用,以檢測您的結果是否不適合 32 位int值。 在轉換為int long
  • d附加到文字以明確它們的類型是double
package work.basil.demo.math;

import java.util.Objects;

public final class CalcPair
{
    // Member fields.
    private final double numdob;
    private final int numint;
    private final double result;

    // Constructors.
    public CalcPair ( final double numdob , final int numint )
    {
        this.numdob = numdob;
        this.numint = numint;
        // Calculate result
        double x = ( 10.0d * this.numdob );
        int y = Math.toIntExact( ( long ) ( 3.31d * this.numint ) );  // Truncate `double` fractional to a `long` integer, then fit to an `int`. The `Math.toIntExact` call throws exception if beyond the bounds of `int` type.
        this.result = ( x + y );
    }

    // Getters.

    public double numdob ( ) { return numdob; }

    public int numint ( ) { return numint; }

    public double result ( ) { return this.result; }

    // `Object` overrides.

    @Override
    public boolean equals ( final Object o )
    {
        if ( this == o ) return true;
        if ( o == null || getClass() != o.getClass() ) return false;
        CalcPair calcPair = ( CalcPair ) o;
        return Double.compare( calcPair.numdob , numdob ) == 0 && numint == calcPair.numint;
    }

    @Override
    public int hashCode ( )
    {
        return Objects.hash( numdob , numint );
    }

    @Override
    public String toString ( )
    {
        return "CalcPair{ " +
                "numdob=" + numdob +
                " | numint=" + numint +
                " | result=" + result +
                " }";
    }
}

用法。

double numdob = Double.parseDouble( "7" );
int numint = Integer.parseInt( "42" );
CalcPair calcPair = new CalcPair( numdob , numint );
double result = calcPair.result();

System.out.println( "result = " + result );

結果 = 209.0

順便說一句,要了解浮點技術會犧牲准確性來換取執行速度。 如果您關心准確性,請使用BigDecimal而不是 float/Float/double/Double 類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM