(我是初学者)
双倍 x = 0.5;双 y = 0.3;
String[]normal = {"x","y","cos","sin","avg"};
String[]complex = {"cos","sin","avg"};
char coordinate = (char) (new Random().nextInt(2) + 'x');
String result = "";
if(levels == 1){
String value1 = (normal[new Random().nextInt(normal.length)]);
if (value1.equals("sin") ||value1.equals("cos")){
result = value1 + "( pi *" + coordinate + ")";
}
else if(value1.equals("avg")){
result = value1 + "(" + coordinate + "," + coordinate + ")" ;
}
else{
result = value1 ;
}
}else{
String value = (complex[new Random().nextInt(complex.length)]);
if((value.equals("sin") ||value.equals("cos"))&&levels!=0 ){
result = value + "( pi *" + createFunction(levels - 1) + ")";
}
else if(value.equals("avg")&& levels !=0){
result = value +"(" + createFunction (levels - (levels-1)) + "," + createFunction (levels - (levels-1)) + ")" ;
}
else if(value.equals("avg")&& levels ==2){
result = value + "(" + createFunction (levels - 1) + "," + coordinate + ")" ;
}
else{
result = value ;
}
}
return result;
}
双功能 = ;
结果将在字符串中为 "sin(pi*cos(pi*x*y))"
如何计算此字符串并保持双精度函数
您正在询问如何解析包含任意表达式的字符串,然后对其进行计算以获得浮点结果。
这是相当困难的,需要一个表达式解析器,将字符串转换为表达式树,以及一个表达式树计算器,以实际计算结果。
您可以使用Groovy脚本执行此操作。诀窍是将您的输入评估为类似 Java 的表达式:
public final class Test{
private static GroovyShell createMathShell() {
GroovyShell shell = new GroovyShell();
shell.evaluate("" +
"cos = {double x -> Math.cos(x)}n" + // predefine functions as lambda
"sin = {double x -> Math.sin(x)}n" + // expressions
"pi = Math.PIn" // define pi
);
return shell;
}
public static void main(String[] args) {
GroovyShell shell = createMathShell();
// set values
shell.setVariable("x", 0);
shell.setVariable("y", 1);
// evaluate
double result = (Double) shell.evaluate("sin(pi*cos(pi*x*y))");
System.out.println(result);
}
}
执行此代码将打印:
1.2246467991473532E-16
初始化一个double
并将值直接写入该变量是明智的。
Double answer = ....;
当您需要原始值时,只需使用变量 answer
.当您需要将其作为字符串时,只需使用:
String answer_string = String.valueOf(answer);
或者,例如:
System.out.println(String.valueOf(answer));
Math.sin 和 Math.cos 方法将接受双精度值,并返回双精度值。只需编写一个方法,作为参数 x 和 y 即可返回公式:
double myAlgorithm( double x, double y){
return Math.sin(Math.PI*Math.cos(Math.PI*x*y))
}
这将工作,将 x 和 y 传递为 int,因为它将被隐式转换为双倍
double myAlgorithm( int x, int y){
return Math.sin(Math.PI*Math.cos(Math.PI*x*y))
}
而且,如果要传递字符串而不是类型:
double myAlgorithm( String x, String y){
return Math.sin(Math.PI*Math.cos(Math.PI*(Double.parseDouble(x).doubleValue())*(Double.parseDouble(y).doubleValue())))
}
这应该可以做到:
Double.valueOf(string);