2016-12-07 2 views
-3

В принципе у меня есть четыре функциифункции вызова отдельно в цикле

f1 
f2 
f3 
f4 

и мне нужно создать цикл или в то время как цикл, который будет вызывать каждую функцию для каждой итерации

так для первой итерации

1st = f1 

для второго

2-= f2

, если петля должны были работать в течение 8 раз было бы

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

Я использую java, и я думаю, что мне нужно будет, чтобы использовать % оператор

Благодаря

+2

и на 5-й итерации? – Alnitak

+1

как насчет переключателя? – GurV

+0

5-я итерация будет первой функцией снова – bighead

ответ

-2

вложенной, если -элемент коммутатора может выполнить эту работу. Ranging, от 1 до 4, так как у вас есть 4 функции. Я не думаю, что вам понадобится% operator для этого.

+1

вам нужен оператор '%' (или эквивалентная логика, чтобы сбросить счетчик функций до 1), если цикл может работать более четырех итераций. – Alnitak

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

    } 

Runnable на самом деле не согласуется с Callable, поэтому это похоже на неправильное использование, но я не вижу простого способа сделать это с помощью типов в java.util.function.

+0

Спасибо, курс, который я никогда не упоминал коммутаторы, поэтому мне нужно найти на нем – bighead

+0

Я удалил комментарий, который вы не можете использовать для ссылок на методы. Я знаю, что могу получить ссылку на такую ​​функцию ('Main :: f1' и т. Д.), Но api для использования' Function' в этом случае является более болезненным, чем выполнение интерфейса. – sfjac

+0

@Andreas Вспоминая, что Runnable - это тип функции, не принимающей аргументов и возвращающей пустоту! :) Кроме того, это похоже на неправильное использование типа, предназначенного для потоковой передачи. – sfjac

Смежные вопросы