2017-06-03 1 views
0

Je suis à la base même de l'apprentissage de Java, j'ai essayé de chercher cette réponse mais peut-être que je ne sais pas ce que je cherche. Je veux effectuer plusieurs opérations sur un nombre, jusqu'à présent, la seule façon de le faire est d'avoir des variables intermédiaires avec des opérations effectuées une à la fois. Cela ne peut pas être le meilleur moyen. Ce qui suit est le code dans ma principale méthode que j'aimerais avoir le travail:Java Comment chaîner avec la classe de maths

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

promptForDouble() méthode renvoie un double, il est la deuxième ligne qui me préoccupe le plus. L'erreur que je reçois est

"error: double cannot be dereferenced."

Je suppose que ce qui se passe est la variable doit être l'argument des méthodes de classe Math, mais je comprends qu'il pourrait aussi faire avec la variable étant un type primitif.

Répondre

3

abs et sqrt ne sont pas des méthodes de double (qui est une primitive, donc il n'a pas de méthodes de toute façon - comme indiqué dans le message d'erreur « re obtenir), mais la méthode statique de Math qui prennent un double comme argument et renvoyer un résultat double:

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

Ce s exactement ce que je cherchais! Génial! –

1

Vous devez faire ceci:

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

Math classe ne met pas en oeuvre « builde r motif "(pour des raisons d'efficacité), mais vous pouvez créer votre propre implémentation de classe Math qui permet le chaînage.

est un exemple:

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; 
    } 
} 

Utilisation:

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

Ou avec 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; 
    } 
} 

Utilisation:

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

Cela répond à ma question très littéralement. J'hésite à l'accepter parce que je ne vais pas utiliser cette réponse, bien qu'elle réponde à ma question à la lettre. * hausser les épaules * faites attention à ce que vous souhaitez. –

+0

@KaariLandry pas de problème :) – matoni