Java如何与数学类链接
我已经掌握了学习Java的基本知识,我已经尝试过搜索这个答案,但可能我不知道我在搜索什么。 我想对一个数字执行多个操作,到目前为止,我知道的唯一方法是让中间变量一次执行一个操作。这不是最好的办法。以下是我的主要方法中的代码,我希望能够使用这些代码:Java如何与数学类链接,java,method-chaining,Java,Method Chaining,我已经掌握了学习Java的基本知识,我已经尝试过搜索这个答案,但可能我不知道我在搜索什么。 我想对一个数字执行多个操作,到目前为止,我知道的唯一方法是让中间变量一次执行一个操作。这不是最好的办法。以下是我的主要方法中的代码,我希望能够使用这些代码: double sqrtAbsInput = promptForDouble("I can get the square root of the absolute value."); double sqrtAbsOutput = sqrtAbs
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
类方法的参数,但我理解它也可能与作为基元类型的变量有关。您必须这样做:
System.out.println(Math.sqrt(Math.abs(sqrtAbsInput)));
您必须这样做:
System.out.println(Math.sqrt(Math.abs(sqrtAbsInput)));
abs
和sqrt
不是double
的方法(这是一个原语,因此它没有任何方法-正如您收到的错误消息中所指出的那样),而是Math
的静态方法,它将double
作为参数并返回double
结果:
double sqrtAbsOutput = Math.sqrt(Math.abs(sqrtAbsInput));
abs
和sqrt
不是double
的方法(这是一个原语,因此它没有任何方法-正如您收到的错误消息中所指出的那样),而是Math
的静态方法,它将double
作为参数并返回double
结果:
double sqrtAbsOutput = Math.sqrt(Math.abs(sqrtAbsInput));
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();
double result = new MathBuilder(-10)
.apply(Math::abs)
.apply(Math::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).abs().sqrt().build();
double result = new MathBuilder(-10)
.apply(Math::abs)
.apply(Math::sqrt)
.build();
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();
double result = new MathBuilder(-10)
.apply(Math::abs)
.apply(Math::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).abs().sqrt().build();
double result = new MathBuilder(-10)
.apply(Math::abs)
.apply(Math::sqrt)
.build();
那正是我要找的!伟大的那正是我要找的!伟大的这非常准确地回答了我的问题。我犹豫着接受它,因为我不会使用这个答案,尽管它不折不扣地回答了我的问题。耸耸肩,小心你想要什么。@KaariLandry没问题:)这是对我问题的直截了当的回答。我犹豫着接受它,因为我不会使用这个答案,尽管它不折不扣地回答了我的问题。耸耸肩小心你的愿望。@KaariLandry没问题:)