1

我有函数 A、函数 B 和函数 C

我正在尝试从 Main 随机调用其中一个函数(A 或 B 或 C)。

我该怎么做呢?

我可以将函数放在一个名为 FunctionList 的数组列表中吗

然后进行以下操作?

int x = (int)(Math.random() * Functionlist.size());
FunctionCall = FunctionList.get(x) 
4

3 回答 3

2

如果函数的数量很少,最简单的方法是 a switch,

switch((int)(Math.random()*NUM_FUNCTIONS) {
    case 0:
        functionA();
        break;
    case 1:
        functionB();
        break;
  //  ...
}
于 2012-08-01T23:26:08.443 回答
0

Java 不支持函数指针。一种解决方法是有条不紊地命名您的函数,即 f1、f2、f3 等……然后根据该模式创建一个 Method 对象。例如,使用函数名 f1、f2、f3,您可以这样做:

java.lang.reflect.Method method;
try {
  methodName = "f" + String.valueOf((int) Math.random()*NUM_FUNCTIONS);
  method = obj.getClass().getMethod(methodName, param1.class, param2.class, ..); 
} catch (SecurityException e) {
  // ...
} catch (NoSuchMethodException e) {
  // ...
}

然后像这样调用函数:

try {
  method.invoke(obj, arg1, arg2,...);
} catch (IllegalArgumentException e) {
} catch (IllegalAccessException e) {
} catch (InvocationTargetException e) {

*这个答案是从这里大量借来的。

于 2012-08-01T23:37:18.533 回答
0

我会以标准方式模拟函数对象,方法是创建 - 可能是匿名的 -Function<T>使用方法实现某些接口的类call(T arg),或者甚至Runnable,如果没有参数的话。这些实例可以放入一个集合中

于 2012-08-02T07:15:47.160 回答