随机分配方法为输入(Random assign methods into inputs)

2019-10-30 03:22发布

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

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

Answer 1:

这里是一个解决方案...

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;


Answer 2:

你可以使用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




                }


Answer 3:

存储您的方法在数组中,并采取随机数组元素的每个名字和电话号码。 它的使用功能界面可能比较容易,所以让我们先申报

@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点的方法到您的阵列。



文章来源: Random assign methods into inputs
标签: java random