对于每一个的输入(名称,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
}
任何帮助将不胜感激。 谢谢
这里是一个解决方案...
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功能增加的情况下。
所有的工作都是在这里完成
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是一个随机值包括8之间0和。
int n = random.nextInt(FUNCTION_NUMBER * FUNCTION_NUMBER);
组合的数量可以成组地分裂。 一组为一个名称的功能。 要做到这一点,我们使用的除法运算符。 因此,对于值0,1和2的组号是0(泛函)。 对于值3,4和5中的基团数为1(functionB)和值6,7和8。
int name_function_index = n / FUNCTION_NUMBER;
对于电话号码的功能,它就像我们遍历功能,每个功能名(各组像前文所述)。 要做到这一点,我们使用模运算符。
int phone_no_function_index = n % FUNCTION_NUMBER;
下面是对于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;
你可以使用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
}
存储您的方法在数组中,并采取随机数组元素的每个名字和电话号码。 它的使用功能界面可能比较容易,所以让我们先申报
@FunctionalInterface
public interface InputMethod {
String method();
}
我假设你的方法返回字符串,但任何其它类型的也可以工作。
通过以上的接口,你可以,例如做:
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);
示例输出:
16:58:16.404504 16:58:16.404784
在这个特殊的运行LocalTime.now
碰巧同时用于姓名和号码。 我想表现这一个你,因为时间是不完全一样的,因为该方法是在连续打了两次电话。
所以,只要把1000点的方法到您的阵列。