对于每个输入(名称,phoneno),我使用随机数生成器将输入分配给方法。我的目标是将所有可能的方法组合输入到输入中。
以下是我的代码。如果我有1000个输入和方法怎么办?这有什么有效的方法吗?
public static void main(String[] args) {
for (int i = 0; i < 9; i++) {
Random myRand = new Random();
int randomInteger = myRand.nextInt(10);
if (randomInteger == 0) {
name = methodA();
phoneno = methodA();
} else if (randomInteger == 1) {
name = methodA();
phoneno = methodB();
} else if (randomInteger == 2) {
name = methodB();
phoneno = methodB();
} else if (randomInteger == 3) {
name = methodB();
phoneno = methodA();
} else if (randomInteger == 4) {
name = methodC();
phoneno = methodC();
} else if (randomInteger == 5) {
name = methodC();
phoneno = methodA();
} else if (randomInteger == 6) {
name = methodC();
phoneno = methodB();
} else if (randomInteger == 7) {
name = methodA();
phoneno = methodC();
} else if (randomInteger == 8) {
name = methodB();
phoneno = methodC();
}
}
}
public static String methodA() {
//do something
}
public static String methodB() {
//do something
}
public static String methodC() {
//do something
}
任何帮助将不胜感激。谢谢
答案 0 :(得分:0)
您可以使用switch语句
int number=myRand.nextInt(10);
switch(number){
case 0:
case 1:
case 7:
name=methodA();
break;
case 2:
case 3:
case 8:
name=methodB();
//repeat for C
}
switch(number){
case 0:
case 3:
case 5:
phoneno=methodA();
break;
//repeat for B and C
}
答案 1 :(得分:0)
这是一个解决方案......
import java.util.Random;
public class Main {
public static final int FUNCTION_NUMBER = 3;
public static String functionA() {
return "A";
}
public static String functionB() {
return "B";
}
public static String functionC() {
return "C";
}
public static String callFunction(int function_index) {
switch (function_index) {
case 0: return functionA();
case 1: return functionB();
case 2: return functionC();
default: throw new IllegalArgumentException("Incorrect value for function_index");
}
}
public static void main(String[] args) {
Random random = new Random();
int n = random.nextInt((FUNCTION_NUMBER * FUNCTION_NUMBER) - FUNCTION_NUMBER);
int name_function_index = n / FUNCTION_NUMBER;
int phone_no_function_index = n % FUNCTION_NUMBER;
System.out.print(callFunction(name_function_index));
System.out.print(callFunction(phone_no_function_index));
System.out.println("--------------");
}
}
如果要添加其他函数,只需声明它,递增FUNCTION_NUMBER常量并在callFunction函数中添加一个case。
所有工作都在这里完成
int n = random.nextInt(FUNCTION_NUMBER * FUNCTION_NUMBER);
int name_function_index = n / FUNCTION_NUMBER;
int phone_no_function_index = n % FUNCTION_NUMBER;
考虑到您的示例中有3个功能,我们有9种组合(AA,AB,AC,BA,BB,BC,CA,CB,CC)。 n是0到8之间的随机值。
int n = random.nextInt(FUNCTION_NUMBER * FUNCTION_NUMBER);
组合数量可以分组。一组用于一个名称功能。 为此,我们使用除法运算符。 因此,对于值0,1和2,组编号为0(functionA)。对于值3,4和5,组编号为1(functionB),值为6,7和8。
int name_function_index = n / FUNCTION_NUMBER;
对于电话号码功能,它就像我们遍历每个名称功能的功能一样(对于每个组,如前所述)。 为此,我们使用模运算符。
int phone_no_function_index = n % FUNCTION_NUMBER;
这是n的每个值的函数索引表。 您可以看到它代表所有功能组合。
n name_function phoneno_function
0 0 0
1 0 1
2 0 2
3 1 0
4 1 1
5 1 2
6 2 0
7 2 1
8 2 2
如果要放弃复制,可以使用此
int n = random.nextInt(FUNCTION_NUMBER * FUNCTION_NUMBER) - FUNCTION_NUMBER;
int name_function_index = n % FUNCTION_NUMBER;
int phone_no_function_index = (n + 1 + (n/4)) % FUNCTION_NUMBER;
答案 2 :(得分:0)
将您的方法存储在一个数组中,并为每个名称和电话号码取一个随机数组元素。使用功能界面可能最简单,所以让我们首先声明
id int(50),token varchar(500),expired_at datetime
我假设你的方法返回字符串,但任何其他类型也会起作用。
使用上述界面,您可以执行以下操作:
@FunctionalInterface
public interface InputMethod {
String method();
}
示例输出:
16:58:16.404504 16:58:16.404784
在此特定运行中, InputMethod[] methods = {
() -> "A",
() -> LocalTime.now(ZoneId.of("Asia/Novosibirsk")).toString(),
() -> "42",
SomeOtherClass::someLongAndComplicatedMethod
};
Random myRand = new Random();
int randomInteger = myRand.nextInt(methods.length);
String name = methods[randomInteger].method();
randomInteger = myRand.nextInt(methods.length);
String phoneno = methods[randomInteger].method();
System.out.println(name + ' ' + phoneno);
恰好用于名称和号码。我想向你展示这个,因为时间不完全相同,因为该方法连续两次被调用。
所以只需将1000个方法放入数组中。