2017-06-03 86 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