Here is a solution...
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("--------------");
}
}
If you want to add an other function, just declare it, increment the FUNCTION_NUMBER constant and add a case in the callFunction function.
All the job is done here
int n = random.nextInt(FUNCTION_NUMBER * FUNCTION_NUMBER);
int name_function_index = n / FUNCTION_NUMBER;
int phone_no_function_index = n % FUNCTION_NUMBER;
Considering that you have 3 functions in your example, we have 9 combinations (AA, AB, AC, BA, BB, BC, CA, CB, CC).
n is a random value between 0 and 8 included.
int n = random.nextInt(FUNCTION_NUMBER * FUNCTION_NUMBER);
The number of combinations can be splitted in groups. One group for one name function.
To do that we use the division operator.
So, for the values 0, 1 and 2 the group number is 0 (functionA). For the values 3, 4 and 5 the group number is 1 (functionB) and for the value 6, 7 and 8.
int name_function_index = n / FUNCTION_NUMBER;
For the phone number function, it's like we iterate over the functions for each name function (for each group like described previously).
To do that we use the modulo operator.
int phone_no_function_index = n % FUNCTION_NUMBER;
Here is a table of the functions indexes for each value of n.
You can see that it represents all the functions combinations.
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
If you want to discard the duplications, you can use this
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;