簡體   English   中英

Java如何與Math類鏈接

[英]Java How to chain with Math class

我只是學習Java的基礎知識,我曾嘗試搜索此答案,但也許我不知道要搜索什么。 我想對一個數字執行多項操作,到目前為止,我唯一知道的方法就是讓中間變量一次執行一次操作。 這不是最好的方法。 以下是我希望工作的主要方法中的代碼:

  double sqrtAbsInput = promptForDouble("I can get the square root of the absolute value.");
  double sqrtAbsOutput = sqrtAbsInput.Math.abs().sqrt();
  System.out.println(sqrAbsOutput);

promptForDouble()方法返回一個double,這是我最關心的第二行。 我得到的錯誤是

“錯誤:不能取消引用double。”

我假設正在發生的事情是變量必須是Math類方法的參數,但我知道它也可能與變量是原始類型有關。

abssqrt不是double方法(這是一種原始方法,因此無論如何都沒有任何方法-正如您收到的錯誤消息中所述),而是Math靜態方法,該方法將double作為參數,並且返回一個double結果:

double sqrtAbsOutput = Math.sqrt(Math.abs(sqrtAbsInput));

Math類沒有實現“構建器模式”(出於效率原因),但是您可以創建自己的允許鏈接的Math類實現。

這是一個例子:

public class MathBuilder {
    private double value;

    public MathBuilder(double value) {
        this.value = value;
    }

    public MathBuilder abs() {
        value = Math.abs(value);
        return this;
    }

    public MathBuilder sqrt() {
        value = Math.sqrt(value);
        return this;
    }

    // other builder-math methods...

    public double build() {
        return value;
    }
}

用法:

double result = new MathBuilder(-10).abs().sqrt().build();

或使用Java 8:

public class MathBuilder {
    private double value;

    public MathBuilder(double value) {
        this.value = value;
    }

    public MathBuilder apply(DoubleUnaryOperator o) {
        value = o.applyAsDouble(value);
        return this;
    }

    public double build() {
        return value;
    }
}

用法:

double result = new MathBuilder(-10)
        .apply(Math::abs)
        .apply(Math::sqrt)
        .build();

您將必須執行以下操作:

System.out.println(Math.sqrt(Math.abs(sqrtAbsInput)));

暫無
暫無

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

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