【问题标题】:call functions separately in a for loop在 for 循环中分别调用函数
【发布时间】:2016-12-11 22:50:33
【问题描述】:

基本上我有四个函数

f1
f2
f3 
f4

我需要创建一个 for 循环或 while 循环来为每次迭代调用每个函数

所以对于第一次迭代

1st = f1

第二次

2nd = f2

如果循环运行 8 次,它会是

f1()
f2()
f3()
f4()
f1()
f2()
f3()
f4()

我正在使用java,我认为我需要使用% 运算符

谢谢

【问题讨论】:

  • 第 5 次迭代?
  • 换个开关怎么样?
  • 第 5 次迭代将再次成为第一个函数

标签: java loops


【解决方案1】:

最简单的方法是在循环索引上使用开关和模运算符。例如:

public class Main {

    static void f1() {
        System.out.println("f1");
    }
    static void f2() {
        System.out.println("f2");
    }
    static void f3() {
        System.out.println("f3");
    }
    static void f4() {
        System.out.println("f4");
    }

    public static void main(String[] args) {

        for (int i = 0; i < 16; ++i) {
            switch (i % 4) {
                case 0:
                    f1();
                    break;
                case 1:
                    f2();
                    break;
                case 2:
                    f3();
                    break;
                case 3:
                    f4();
                    break;
            }
        }
    }
}

正如@Andreas 指出的那样,一旦你记住了用于函数的正确类型(在本例中为Runnable),就可以使用数组来完成:

    // ... 
    static Runnable[] functions = 
        { Main::f1, Main::f2, Main::f3, Main::f4 };

    public static void main(String[] args) {

        for (int i = 0; i < 16; ++i)
            functions[i % 4].run();

    }

RunnableCallable 并不完全一致,所以这似乎有点误用,但我没有看到通过java.util.function 中的类型实现此目的的简单方法。

【讨论】:

  • 感谢我正在做的课程从未提到过开关,所以我需要查看它
  • 我删除了你不能做方法引用的评论。我知道我可以获得对这样一个函数的引用(Main::f1 等),但是在这种情况下,使用 Function 的 api 比做一个接口更痛苦。
  • @Andreas 记住 Runnable 是一种不带参数并返回 void 的函数! :) 另外,这似乎是对类型的误用,它是用于线程的。
  • @Andreas 很高兴知道我不是唯一一个发现这个令人费解的人。 :)
【解决方案2】:

switch 的嵌套 if-else 可以完成这项工作。范围, 1 到 4 ,因为你有 4 个功能。我认为您不需要 % 运算符来这样做。

【讨论】:

  • 如果循环可以运行超过四次迭代,您需要一个 % 运算符(或将函数调度计数器重置为 1 的等效逻辑)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-11
  • 1970-01-01
  • 1970-01-01
  • 2014-11-26
  • 2021-02-21
  • 2011-12-03
相关资源
最近更新 更多