将方法随机分配到输入中

时间:2018-06-10 08:30:23

标签: java random

对于每个输入(名称,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
}

任何帮助将不胜感激。谢谢

3 个答案:

答案 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个方法放入数组中。