переключать операторы регистра и запускать метод изнутри - PullRequest
0 голосов
/ 19 марта 2020

Я использую случайное число в случае переключателя. Так что имейте что-то вроде:

public void something {
Random myRand = new Random();
int number = myRand.nextInt(10 - 1) + 1;
switch(number)
case 1:
     Do something and on completion go back and start running the something method again.
break:
case 1;
     Do something and on completion go back and start running the something method again.
break;

Каждый оператор case может быть выполнен любое количество раз в зависимости от ввода от пользователя, некоторые могут даже не использоваться.

Что-то, что я хотел бы, это что-то внутри описания дела говорится: -

public void something (run);

Возможно ли то, что я пытаюсь сделать, или есть лучший способ?

Ответы [ 5 ]

0 голосов
/ 19 марта 2020

Могу ли я предложить вам использовать интерфейсы? то, что вы пытаетесь реализовать, известно как функциональное программирование , в котором вы передаете функции в качестве аргумента другим функциям

java поддерживает функциональное программирование с помощью интерфейсов и имеет множество встроенных функций. -в интерфейсах для упрощения процесса

я рекомендую вам взглянуть на java .util.function package

теперь давайте перейдем к вашему коду

public void something(Supplier<Void> function) {
    boolean condition = true; //use this boolean to control your loop
    while (condition) {
        Random myrand = new Random();
        int number = myrand.nextInt(10 - 1) + 1;
        switch (number) {
            case 1:
                function.get();
                break;
            case 2:
                function.get();
                break;
        }
    }
}

и вы можете называть свое «что-то», как это

public void Call() {

    //if you want to declare the function only once
    something(new Supplier<Void>() {
        @Override
        public Void get() {
            System.out.println("the job is done!");
            return null;
        }
    });

    // if you already have a class implementing supplier
    something(new MyFunction());
}

не тем, что интерфейс поставщика используется, потому что ваша функция не имеет никаких входов, вы также можете использовать Consumer, BiConsumer, Function, BiFunction. ... для функций с входами

0 голосов
/ 19 марта 2020

То, что я хотел бы, - это что-то внутри выражения case, говорящее: -

publi c void что-то (run);

Нет, это не правильно синтаксически.

Предполагая, что вы хотите вызвать метод something с параметром run, вы можете сделать это как

something(run);

Не стесняйтесь комментировать в случае каких-либо сомнений.

0 голосов
/ 19 марта 2020

В этом случае вы можете использовать оператор do-while с условием остановки выполнения. Вызовите свой метод что-то внутри do while.

do {
something();
} while(condition);

Это вызовет ваш метод, выполнит ваш случай переключения и снова вызовет ваш метод что-то.

0 голосов
/ 19 марта 2020

Следующий код несколько раз вызывает метод runSomeMethod () случайное число раз.

Используйте a для l oop:

public void something() {
    Random myrand = new Random();
    int number = myrand.nextInt(10 - 1) + 1;
    for(int i=0 ; i<number ; i++) {

        runSomeMethod();
    }
}
0 голосов
/ 19 марта 2020

обеспокоен вашим CASE используемым синтаксисом

Решение идет следующим образом -> продолжайте цикл некоторое время l oop

public void something {
    boolean condition = true; // toggle this condition boolean to FALSE, when you want to break the loop
    while(condition){
        Random myrand = new Random();
        int number = myrand.nextInt(10 - 1) + 1;
        switch(number)
        case 1;
             Do something and on completion go back and start running the something method again.
        break;
        case 1;
             Do something and on completion go back and start running the something method again.
        break;

    }
}
...