2017-06-03 1 views
0

私はJavaの学習の非常に基本的な段階ですが、私はこの答えを探してみましたが、私が何を探しているのか分かりません。 数値に対して複数の演算を実行したいのですが、これまでの方法を知っている唯一の方法は、一度に1つの演算を実行する中間変数を持つことです。これは最善の方法ではありません。以下は、私が仕事を持っているのが大好きだ、私のメインメソッドのコードです: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を返します。私が手にエラーが、私は何が起こっていると仮定し

"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 pattern "(効率上の理由から)が、チェーン化を可能にする独自の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(); 
+0

これは私の質問に非常に文字通り答えます。私は手紙に私の質問に答えるにもかかわらず、私はこの答えを使用しないので、それを受け入れることを躊躇する。あなたが欲しいものを注意してください。 –

+0

@KaariLandry問題なし:) – matoni

関連する問題