Попытка использовать For-Loop с «меню» - PullRequest
0 голосов
/ 16 мая 2019

Начинающий здесь, пожалуйста, будьте как можно более объяснительным!

Вопрос курса попросил меня создать меню (готово).

Наличие нескольких опций в меню дает разные одноразовые результаты(готово).

Теперь он хочет, чтобы я реализовал цикл for, while и do...while (НЕ МОЖЕТ ПОНИМАТЬ)

Я действительно испытал все свои элементарные знания, включаясоздание и заполнение массива внутри цикла for (что задним числом было глупой идеей).

public void displayMenu()
{
    System.out.println("A. Option #A");
    System.out.println("B. Option #B");
    System.out.println("C. Option #C");
    System.out.println("D. Option #D");
    System.out.println("X. Exit!");
    System.out.println();
    System.out.println("Please enter your choice:");
}

public void start()
{
    displayMenu();
    Scanner console = new Scanner(System.in);
    String input = console.nextLine().toUpperCase();
    System.out.println();

    switch (input)
    {
        case "A": System.out.println("Option #A was selected"); break;
        case "B": System.out.println("Option #B was selected"); break;
        case "C": System.out.println("Option #C was selected"); break;
        case "D": System.out.println("Option #D was selected"); break;
        case "X": System.out.println("You chose to Exit"); break;
        default: System.out.println("Invalid selection made"); break;
    }

}

public void startFor()
{
  /*Each of these methods will modify the original start() method, each 
   *will add a loop of the specific type so that the menu is displayed 
   *repeatedly, until the last option is selected. When the last option 
   *is selected, exit the method (i.e. stop the loop).
   */
}

Ответы [ 2 ]

1 голос
/ 16 мая 2019

Как вы просили привести пример с for в комментариях.

Кажется, что смысл выполнения упражнения - выполнять итерацию в меню до тех пор, пока не будет выполнено условие выхода ("X".equals(input)).Это означает, что между тремя условиями в операторе for необходимо указать только одно.Это связано с тем, что общая форма (основного) оператора for имеет вид

for ( [ForInit] ; [Expression] ; [ForUpdate] )

, где ни один из этих терминов в скобках не является обязательным, поэтому мы также можем избавиться от [ForInit] и [ForUpdate](, но с запятой ).Это приводит к тому, что ничего не инициализируется с помощью [ForInit] и ничего не делается в конце каждой итерации цикла с помощью [ForUpdate], в результате чего мы проверяем только условие выхода, которое задается выражением [Expression] (когда оно вычисляетсяна false, цикл завершается).

Обратите внимание, что console объявляется вне цикла, поскольку было бы расточительно выделять его на каждой итерации.А также input, так как вам это нужно в условии оператора for.

Scanner console = new Scanner(System.in);
String input = "";

for (;!"X".equals(input);) { // notice, the first and last part of the for loop are absent

    displayMenu();

    input = console.nextLine().toUpperCase();
    System.out.println();

    switch (input) {
        case "A": System.out.println("Option #A was selected"); break;
        case "B": System.out.println("Option #B was selected"); break;
        case "C": System.out.println("Option #C was selected"); break;
        case "D": System.out.println("Option #D was selected"); break;
        case "X": System.out.println("You chose to Exit"); break;
        default: System.out.println("Invalid selection made"); break;
    }
}

Вы можете заметить, что это немного неловко, поскольку это не то, что вы обычно используете цикл for для.

В любом случае, на этом этапе версия while становится тривиальной (while (!"X".equals(input))) и, в этом случае, do...while также эквивалентна (do { ... } while (!"X".equals(input))), так как применяется то же условиекак в конце токовой петли, так и в начале следующей, и между ними нет побочных эффектов.

Кроме того, вы можете заметить, что while (condition) и for (; condition ;) функционально эквивалентныи вы можете узнать, почему вы должны использовать один вместо другого.Ответ читаемость.Намного яснее, что вы хотите делать, когда делаете while (condition).

0 голосов
/ 16 мая 2019

Все аргументы в цикле for не обязательны.Определите флаг остановки и проверьте, является ли ввод «X» или нет.Всякий раз, когда ввод «X», просто измените stopFlag или просто вы можете разорвать цикл с помощью оператора break;


public void startFor()
    {
      boolean stopFlag = false;

      for(; stopFlag == false ;) {

        displayMenu();
        Scanner console = new Scanner(System.in);
        String input = console.nextLine().toUpperCase();
        System.out.println();

        switch (input)
        {
            case "A": System.out.println("Option #A was selected"); break;
            case "B": System.out.println("Option #B was selected"); break;
            case "C": System.out.println("Option #C was selected"); break;
            case "D": System.out.println("Option #D was selected"); break;
            case "X": System.out.println("You chose to Exit"); break;
            default: System.out.println("Invalid selection made"); break;
        }
        if(input.contentEquals("X"))
            stopFlag = true;
      }
    }

...