2017-06-03 93 views
0

我在學習Java的基礎知識,我試圖尋找這個答案,但也許我不知道我在尋找什麼。 我想對一個數字執行多個操作,到目前爲止,我知道如何做到這一點的唯一方法是具有一次執行一個操作的中間變量。這不可能是最好的方法。在我的主要方法,下面是代碼,我很想有工作: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()方法返回了一倍,這是大多數與我相關的第二行。我得到的錯誤是

"error: double cannot be dereferenced."

我以爲發生了什麼是變量需要的Math類方法的說法,但我知道它也可能有變量是一個基本類型做。

回答

3

abssqrt不是的double方法(這是一種原始的,所以它沒有任何方法無論如何 - 在錯誤消息指出您「重新獲得),但採取double作爲參數和Math靜態方法返回一個double結果:

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

那正是我在找的!大! –

1

你將不得不這樣做:

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

Math類沒有實現「builde r模式「(出於效率的原因),但是您可以創建自己的數學類實現,從而實現鏈接。

下面是一個例子:

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(); 
+0

這很直接地回答我的問題。我毫不猶豫地接受它,因爲我不會使用這個答案,儘管它回答我的問題。 *聳肩*小心你想要的東西。 –

+0

@KaariLandry沒問題:) – matoni