Java 如何用数学链接 class
Java How to chain with Math class
我处于学习的基础 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()
method returns a double,这是我最关心的第二行。我得到的错误是
"error: double cannot be dereferenced."
我假设发生的事情是变量需要成为 Math
class 方法的参数,但我知道这也可能与变量是原始类型有关。
你必须这样做:
System.out.println(Math.sqrt(Math.abs(sqrtAbsInput)));
abs
和 sqrt
不是 double
的方法(这是一个原始方法,所以它无论如何都没有任何方法 - 如错误消息中所述重新获取),但是 Math
的静态方法将 double
作为参数并且 return 一个 double
结果:
double sqrtAbsOutput = Math.sqrt(Math.abs(sqrtAbsInput));
Math
class 未实现 "builder pattern"(出于效率原因),但您可以创建自己的允许链接的 Math class 实现。
这是一个例子:
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();
我处于学习的基础 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()
method returns a double,这是我最关心的第二行。我得到的错误是
"error: double cannot be dereferenced."
我假设发生的事情是变量需要成为 Math
class 方法的参数,但我知道这也可能与变量是原始类型有关。
你必须这样做:
System.out.println(Math.sqrt(Math.abs(sqrtAbsInput)));
abs
和 sqrt
不是 double
的方法(这是一个原始方法,所以它无论如何都没有任何方法 - 如错误消息中所述重新获取),但是 Math
的静态方法将 double
作为参数并且 return 一个 double
结果:
double sqrtAbsOutput = Math.sqrt(Math.abs(sqrtAbsInput));
Math
class 未实现 "builder pattern"(出于效率原因),但您可以创建自己的允许链接的 Math class 实现。
这是一个例子:
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();