Java编程,怎么实现定时就执行5个函数中的随机的一个,5个函数的内容各不相同,函数名也不同,怎么随机选择呢
5个函数 分别 对应 1 ~ 5 的数字,然后 随机生成 数字,判断这个数字,如果是对应的数字,则执行对应的函数
核心代码:
Random random = new Random();
int index = random.nextInt(functionNames.length);
System.out.println("Executing random function: " + functionNames[index]);
functions[index].run();
效果如图:
完整代码:
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
public class RandomFunctionExecutor {
public static void main(String[] args) {
Timer timer = new Timer();
// 设置定时任务
TimerTask task = new TimerTask() {
@Override
public void run() {
executeRandomFunction();
}
};
// 每隔一段时间执行一次定时任务
timer.schedule(task, 0, 5000);
}
private static void executeRandomFunction() {
// 定义函数名称和对应的函数对象
String[] functionNames = {"function1", "function2", "function3", "function4", "function5"};
Runnable[] functions = {
() -> {
// 函数1的具体代码
System.out.println("Executing function1");
},
() -> {
// 函数2的具体代码
System.out.println("Executing function2");
},
() -> {
// 函数3的具体代码
System.out.println("Executing function3");
},
() -> {
// 函数4的具体代码
System.out.println("Executing function4");
},
() -> {
// 函数5的具体代码
System.out.println("Executing function5");
}
};
// 生成随机数,并根据随机数选择函数执行
Random random = new Random();
int index = random.nextInt(functionNames.length);
System.out.println("Executing random function: " + functionNames[index]);
functions[index].run();
}
}
不知道你这个问题是否已经解决, 如果还没有解决的话:import java.lang.reflect.Array;
import java.util.Arrays;
public class Ma {
public static void main(String[] args) {
double[] a1[] = new double[5][5];
double[] a2[] = new double[5][3];
double[] a3[] = new double[5][3];
System.out.println("-----------------------------------------------------------------------");
System.out.println("-----------------------------------------------------------------------");
System.out.println("25匹随机马的速度");
for (int i = 0; i < a1.length; i++) {
for (int i1 = 0; i1 < a1[i].length; i1++) {
a1[i][i1] = Math.random() * 100;
System.out.print(a1[i][i1] + "\t\t");
}
System.out.println();
}
for (int i = 0; i < a1.length; i++) {
Arrays.sort(a1[i]);
}
double m;
for (int i = 0; i < a2.length; i++) {
for (int i1 = 0; i1 < a2[i].length; i1++) {
m = a1[i][a1[i].length - 1 - i1];
a2[i][i1] = m;
}
}
System.out.println("-----------------------------------------------------------------------");
System.out.println("-----------------------------------------------------------------------");
System.out.println("五次比赛后25匹随机马的速度排列");
for (int i = 0; i < a1.length; i++) {
for (int i1 = 0; i1 < a1[i].length; i1++) {
System.out.print(a1[i][i1] + "\t\t");
}
System.out.println();
}
System.out.println("-----------------------------------------------------------------------");
System.out.println("-----------------------------------------------------------------------");
System.out.println("取五次比赛后25匹随机马的速度排列的前三名");
for (int i = 0; i < a2.length; i++) {
for (int i1 = 0; i1 < a2[i].length; i1++) {
System.out.print(a2[i][i1] + "\t\t");
}
System.out.println();
}
int[] z = new int[5];
;// 存放排序后数组元素原来所在数组的下标
double[] b = new double[5];// 存放需要排序列的数组
double[] d = new double[5];// 存放b[]升序后的数组
for (int i = 0; i < 5; i++) {
b[i] = a2[i][0];
}
for (int i = 0; i < b.length; i++) {
d[i] = b[i];
}
Arrays.sort(d);// 升序排列
for (int i = 0; i < d.length; i++) {
for (int j = 0; j < d.length; j++) {
if (d[i] == b[j]) {
z[i] = j;
b[j] = -999999;
break;
} else {
continue;
}
}
}
System.out.println("-----------------------------------------------------------------------");
System.out.println("-----------------------------------------------------------------------");
System.out.println("第六次比赛:25匹随机马的速度排列的前三名中的第一名比赛结果排列(组内成员不变)");
for (int i = 0; i < a3.length; i++) {
for (int j = 0; j < a3[i].length; j++) {
a3[i][j] = a2[z[i]][j];
System.out.print(a3[i][j] + "\t\t");
}
System.out.println();
}
System.out.println("-----------------------------------------------------------------------");
System.out.println("-----------------------------------------------------------------------");
System.out.println("除去第一名 其他存在争议的马屁比赛结果");
double[] mm = {a3[4][1], a3[4][2], a3[3][0], a3[3][1], a3[2][0]};
Arrays.sort(mm);
for (int i = 0; i < mm.length; i++) {
System.out.print(mm[i] + "\t\t");
}
System.out.println("-----------------------------------------------------------------------");
System.out.println("-----------------------------------------------------------------------");
System.out.println("最快的三匹马为" + a3[4][0] + "\t\t" + mm[4] + "\t\t" + mm[3]);
}
}
运行结果:
-----------------------------------------------------------------------
-----------------------------------------------------------------------
25匹随机马的速度
41.16856306827879 40.58252617025392 67.05712863342502 67.8539567988117 70.7560619248799
53.12588289824111 63.123216402371085 72.26841725311502 37.32135739637138 72.1084431363291
57.54303277063529 16.54300171646218 56.4301716349477 63.46113627279707 71.48397944175716
60.212504664887504 92.90588298272931 62.203994871534675 81.99279982567069 88.09580968326219
11.464967736874554 84.69711834411846 89.52981943859018 57.78249880211842 47.24087381972949
-----------------------------------------------------------------------
-----------------------------------------------------------------------
五次比赛后25匹随机马的速度排列
40.58252617025392 41.16856306827879 67.05712863342502 67.8539567988117 70.7560619248799
37.32135739637138 53.12588289824111 63.123216402371085 72.1084431363291 72.26841725311502
16.54300171646218 56.4301716349477 57.54303277063529 63.46113627279707 71.48397944175716
60.212504664887504 62.203994871534675 81.99279982567069 88.09580968326219 92.90588298272931
11.464967736874554 47.24087381972949 57.78249880211842 84.69711834411846 89.52981943859018
-----------------------------------------------------------------------
-----------------------------------------------------------------------
取五次比赛后25匹随机马的速度排列的前三名
70.7560619248799 67.8539567988117 67.05712863342502
72.26841725311502 72.1084431363291 63.123216402371085
71.48397944175716 63.46113627279707 57.54303277063529
92.90588298272931 88.09580968326219 81.99279982567069
89.52981943859018 84.69711834411846 57.78249880211842
-----------------------------------------------------------------------
-----------------------------------------------------------------------
第六次比赛:25匹随机马的速度排列的前三名中的第一名比赛结果排列(组内成员不变)
70.7560619248799 67.8539567988117 67.05712863342502
71.48397944175716 63.46113627279707 57.54303277063529
72.26841725311502 72.1084431363291 63.123216402371085
89.52981943859018 84.69711834411846 57.78249880211842
92.90588298272931 88.09580968326219 81.99279982567069
-----------------------------------------------------------------------
-----------------------------------------------------------------------
除去第一名 其他存在争议的马屁比赛结果
72.26841725311502 81.99279982567069 84.69711834411846 88.09580968326219 89.52981943859018 -----------------------------------------------------------------------
-----------------------------------------------------------------------
最快的三匹马为92.90588298272931 89.52981943859018 88.09580968326219
进程已结束,退出代码0
组1:X1 X2 X3 X4 X5
组2:X6 X7 X8 X9 X10
组3:X11 X12 X13 X14 X15
组4:X16 X17 X18 X19 X20
组5:X21 X22 X23 X24 X25
但是,现在还不能说最快的3匹马在X1、X6、X11、X16、X21中,因为有可能最快的3匹马全部分在第一组中,即有可能出现X2比X6快
但是我们肯定可以知道,每组的最后2名肯定不会是最快的3匹马,那么排除X4、X5;X9、X10;X14、X15;X19、X20;X24、X25;
第6场:
X1 X2 X3
X6 X7 X8
X11 X12 X13
X16 X17 X18
X21 X22 X23
参赛的为每组的第1名:X1、X6、X11、X16、X21,假设速度排序为X1、X6、X11、X16、X21。
那么我们可以知道,X16、X21及其后面的X17、X18;X22、X23均不可能是最快的3匹马。
第7场:
X1 X2 X3
X6 X7 X8
X11 X12 X13
首先,你可以使用Java的Timer和TimerTask类来实现定时器功能。TimerTask是一个抽象类,它表示一个要定期执行的任务。你需要继承TimerTask类,并实现你的5个函数作为具体的任务。
下面是一个实现的示例代码:
import java.util.Timer;
import java.util.TimerTask;
public class Test {
public static void main(String[] args) {
Timer timer = new Timer();
int delay = 1000; // 延迟1秒执行
int interval = 1000; // 每隔1秒执行一次
// 匿名内部类实现TimerTask,重写run()方法,将具体的函数逻辑放在其中
TimerTask task = new TimerTask() {
@Override
public void run() {
// 随机选择一个函数执行
int randomNum = (int) (Math.random() * 5) + 1;
switch (randomNum) {
case 1:
// 调用函数1的代码
function1();
break;
case 2:
// 调用函数2的代码
function2();
break;
case 3:
// 调用函数3的代码
function3();
break;
case 4:
// 调用函数4的代码
function4();
break;
case 5:
// 调用函数5的代码
function5();
break;
}
}
};
// 启动定时器
timer.scheduleAtFixedRate(task, delay, interval);
}
// 以下为示例的5个函数,根据实际需求替换成你的具体函数实现
public static void function1() {
// 函数1的具体代码
}
public static void function2() {
// 函数2的具体代码
}
public static void function3() {
// 函数3的具体代码
}
public static void function4() {
// 函数4的具体代码
}
public static void function5() {
// 函数5的具体代码
}
}
上述代码中,我们使用了Timer类和TimerTask类来实现定时器功能。通过调用Timer的scheduleAtFixedRate()
方法,我们可以指定任务的延迟和间隔时间,以及要执行的任务。在任务的run()方法中,我们使用Math.random()函数生成一个随机数,然后根据这个随机数选择要执行的函数。
请注意将函数1到函数5替换为你的具体函数实现。
这样,你就可以实现一个定时器,在每个特定时间间隔内执行5个不同的函数中的随机一个了。