Java编程,5个函数的内容各不相同

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();

效果如图:

img

完整代码:

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();
    }
}


不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/1069452
  • 这篇博客你也可以参考下:java 获取长度为5的随机字符串,字符串由随机的5个大小写字母组成
  • 同时,你还可以查看手册:java-学习Java语言 - 描述Java编程语言的基本概念和特点的课程。-类和对象》描述了如何编写创建对象的类,以及如何创建和使用对象。-课堂 中的内容
  • 除此之外, 这篇博客: JAVA实现算法问题25匹马,找出最快的3匹,但是只有5个赛道,每次比赛只能得到5匹马的速度排序,那么最少需要多少次比赛中的 JAVA实现算法问题25匹马,找出最快的3匹,但是只有5个赛道,每次比赛只能得到5匹马的速度排序,那么最少需要多少次比赛 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    • 随机数模拟25匹马匹速度
    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-5 场:
    • 将25匹马分为5组,每组5匹,得到下面的排序,每组最快的马在左侧,即X1、X6、X11、X16、X21分别是每组中最快的。
    组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 
    
    • 目前,我们可以知道,X1是25匹马中最快的,但是X2、X6、X3、X7、X11之间的速度还不确定,需要再一次比赛,而X8、X12、X13不可能是最快的前3名。
    • 参赛的为:X2、X6、X3、X7、X11,速度最快的2匹加上X1构成最快的3匹马。
  • 您还可以看一下 汤小洋老师的跟汤老师学Java(第5季):循环结构课程中的 练习:打印直角三角形小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    首先,你可以使用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个不同的函数中的随机一个了。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^