我现在写信是为了提供一个 Java 应用程序,而不是使用运算符“+”,该应用程序的用户可以字面上使用“add”这个词来将两个数字相加。
我非常坚持如何做到这一点,因为考虑到我必须输入“add()”而不仅仅是“add”,我不能真正使用一种方法来完成该功能。除非有办法在没有括号的情况下执行方法。我必须编写一个全新的课程还是有更简单的方法来做到这一点?
我现在写信是为了提供一个 Java 应用程序,而不是使用运算符“+”,该应用程序的用户可以字面上使用“add”这个词来将两个数字相加。
我非常坚持如何做到这一点,因为考虑到我必须输入“add()”而不仅仅是“add”,我不能真正使用一种方法来完成该功能。除非有办法在没有括号的情况下执行方法。我必须编写一个全新的课程还是有更简单的方法来做到这一点?
根据用户输入的内容,简单解释一下您可以做什么:
int x = get it from the user;
int y = get it from the user;
string operation = get it from the user;
(i.e add(int x, int y), multiply(int x, int y), etc..)
然后创建一个方法 thag 获取值 (x, y, string) say.. 你可以调用它calculate(int x, int y, string operation)
然后在calculate方法中有一个switch语句:
switch(operation)
{
case "add":
add(x,y);
break;
case "multiply":
multiply(x,y);
break;
etc...
}
好吧,让你想想:)。
在 Java 中没有办法做到这一点。你有两个选择:
1)使用预处理器。2)用不同的语言写。您可以用其他语言编写东西,并且仍然与 Java 类和库兼容。
评论中的共识似乎是“你为什么要这样做?这是缓慢而麻烦的'。虽然后一部分是正确的,但通常会这样做。看ScriptEngine
作为一个例子。这是一个小程序中JavaScript ScriptEngine的演示。
读者可能会注意到这ScriptEngine
是一个接口,建议“根据所需的规则实现您自己的脚本引擎”的答案。创建另一种脚本语言是否是一个好主意,留给读者作为练习。
(对 user710502 提出的想法的扩展)
您可以使用反射。
double a = Double.parseDouble(some user input);
double b = Double.parseDouble(some user input);
String operation = some user input; // i.e. "add", "subtract"
Method operator = Calculations.class.getMethod(operation, double.class, double.class);
// NoSuchMethodException is thrown if method of operation name isn't found
double result = (Double) operator.invoke(null, a, b);
在某种计算类中:
public static double add(double a, double b) {
return a + b;
}
public static double subtract(double a, double b) {
return a - b;
}
// and so forth