Csv 从文本文件导入公式

Csv 从文本文件导入公式,csv,formula,Csv,Formula,我正在制作一个简单的程序来测试孩子们解决问题的能力,基本上是一个测验,程序从文本文件中提取一个问题,然后打印这些问题,并检查用户输入的答案是否正确 到目前为止,我已经将此作为我的文本文件: David collects 2 comics each month for 3 months. For the next 2 months, he only collects one each month. How many comics does David collect altogether?,8 S

我正在制作一个简单的程序来测试孩子们解决问题的能力,基本上是一个测验,程序从文本文件中提取一个问题,然后打印这些问题,并检查用户输入的答案是否正确

到目前为止,我已经将此作为我的文本文件:

David collects 2 comics each month for 3 months. For the next 2 months, he only collects one each month. How many comics does David collect altogether?,8
Sally gives out 4 party bags at the end of her party. Inside each party bag are 5 balloons. How many balloons does Sally give out?,20
然后我把它放到一个2D数组中,[0][0]是第一个问题,[0][1]是第一个答案。 这是可行的,但我想使用随机数,这意味着程序必须自己计算答案。这意味着我的文本文件如下所示:

David collects X comics each month for Y months. For the next Z months, he only collects one each month. How many comics does David collect altogether?,((X*Y)+Z)
Sally gives out X party bags at the end of her party. Inside each party bag are Y balloons. How many balloons does Sally give out?,(X*Y)
其中X、Y和Z是随机数,逗号后的部分是计算答案的公式。要打印出问题,我可以使用
if(question.contains(“X”){question=question.replace(“X”,A);}
其中A是一个随机整数。但是如何让Java计算答案呢?如果字符串中有
intanswer=((X*Y)+Z)
,如何将该字符串转换为代码?我读到Java编译器API可以将字符串更改为可用代码,但这是如何工作的

谢谢

导入javax.script.*;
导入java.util.*;
公共班机{
公共静态void main(字符串[]args)引发异常{
ScriptEngine=new ScriptEngineManager().getEngineByName(“JavaScript”);
Map vars=newhashmap();
变量放置(“X”,2);
变量放置(“Y”,1);
变量放置(“Z”,3);
System.out.println(“result=“+engine.eval”((X*Y)+Z)”,新的SimpleBindings(vars));
}
}
使用javax.script,您可以解析和求解简单的公式,并生成随机数

(int)(Math.random()*20))
应该这样做

导入javax.script.*;
导入java.util.*;
公共班机{
公共静态void main(字符串[]args)引发异常{
ScriptEngine=new ScriptEngineManager().getEngineByName(“JavaScript”);
Map vars=newhashmap();
变量放置(“X”,2);
变量放置(“Y”,1);
变量放置(“Z”,3);
System.out.println(“result=“+engine.eval”((X*Y)+Z)”,新的SimpleBindings(vars));
}
}
使用javax.script,您可以解析和求解简单的公式,并生成随机数


(int)(Math.random()*20))
应该能做到

太好了,谢谢。为了创建随机数,我通常使用
inta=random.nextInt(10)
,这和你提到的
(int)(Math.random()*20))
有什么区别吗?基本上是一样的,除非你对线程安全感兴趣,而且发行版的不完整性任何给你随机性的方法都应该这么做。主要区别在于math.random是线程安全的,两者的用法还有其他区别,但只有在生成非常大的一组数字并希望分布均匀时,这才是重要的。这太完美了,谢谢。为了创建随机数,我通常使用
inta=random.nextInt(10)
,这和你提到的
(int)(Math.random()*20))
有什么区别吗?基本上是一样的,除非你对线程安全感兴趣,而且发行版的不完整性任何给你随机性的方法都应该这么做。主要的区别是math.random是线程安全的,两者的用法还有其他区别,但只有在生成非常大的数字集并希望分布均匀时,这一点才重要。
import javax.script.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
    ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
    Map<String, Object> vars = new HashMap<String, Object>();
    vars.put("X", 2);
    vars.put("Y", 1);
    vars.put("Z", 3);
    System.out.println("result = "+engine.eval("((X*Y)+Z)", new SimpleBindings(vars)));
 }
}