gpt4 book ai didi

javascript - Java - ScriptEngineManager nashorn Math.random 不起作用

转载 作者:行者123 更新时间:2023-12-03 07:34:08 25 4
gpt4 key购买 nike

我使用函数名称“random”和参数“1 和 50”调用 follow 函数。

private String callFunction(String functionName, String[] parameter)
throws FileNotFoundException, ScriptException, NoSuchMethodException {

ScriptEngineManager engine = new ScriptEngineManager().getEngineByName("nashorn");
engine.eval(new FileReader(myPath + functionName + ".js"));
Invocable invocable = (Invocable) engine;
Object result;
if (parameter == null) {
result = invocable.invokeFunction(functionName);
} else {
result = invocable.invokeFunction(functionName, parameter);
}
System.out.println(result);
return (String) result;
}

random.js 的内容如下所示:

  function random(min, max){
return Math.floor(Math.random() * (max - min +1)) + min;
}

结果永远不会在 1 到 50 之间。它总是大于 100。

如果我不在java中使用它,它就可以工作。在 java 中从 nashorn/javascript 进行数学运算?

更新:

我的解决方案是:

private String callFunction(String functionName, String parameter)
throws FileNotFoundException, ScriptException, NoSuchMethodException, ClassCastException {
String result = "";
engine.eval(new FileReader(PropertiesHandler.getFullDynamicValuePath() + functionName + ".js"));

if (parameter == null) {
result = (String) engine.eval(functionName + "();");
} else {
result = (String) engine.eval(functionName + parameter + ";");
}
return (String) result;
}

所以我可以使用不同类型的参数。

最佳答案

我稍微调整了你的例子,你不能分配 ScriptEngineScriptEngineManager并且不清楚您如何显示随机值,或者如何调用random。但是,这会在 150 之间生成 100 个随机值

public static void main(String[] ar) {
String script = "function random(min, max) { "
+ "return Math.floor(Math.random() * (max - min + 1)) + min; }";
ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
try {
engine.eval(script);
for (int i = 0; i < 100; i++) {
engine.eval("print(random(1, 50));");
}
} catch (ScriptException e) {
e.printStackTrace();
}
}

关于javascript - Java - ScriptEngineManager nashorn Math.random 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35689615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com