Сбросить цикл for внутри оператора switch

Код, который у меня есть, работает, но когда я выполняю цикл do-while, цикл for не сбрасывается до 1, когда пользователь выбирает Yes для повторного запуска программы. Надеюсь, я ясно выражаюсь.

int choice;
int num;
int i;
String input; 
int b = 1;
switch (choice) {
    case 1:
        do {
            System.out.println("The starting number is 1.");
            //Input
            System.out.print("Enter a value: ");
            num = sc.nextInt();

            for (i = 1; i <= num; i++) {
                b = b * i;
                //Output
                System.out.printf("%d! = %d\n", i, b);
            }

            System.out.print(
                "Run the program again? (Y for Yes, N for No): ");
            input = sc.next();
        } while (input.equalsIgnoreCase("Y"));

        if (input.equalsIgnoreCase("N")) {
            System.out.println(
                "Have a great day!");
            System.exit(0);
        }
        break;
}

Я попробовал петлю while вместо петли for, и я вообще не получил результатов. Я новичок в Java, поэтому я все еще учусь.

Я добавил break в конце цикла for, но это завершает цикл только после 1 приращения.

Что вы имеете в виду, что цикл for не сбрасывается до 1? Цикл for начинается с единицы на каждой итерации, даже после того, как пользователь вводит «Y». Ваш вопрос не ясен

Scott 14.02.2023 22:37

Возможно, вы могли бы отредактировать вопрос, включив в него примеры входных данных, ожидаемых и фактических результатов.

Old Dog Programmer 14.02.2023 22:38

У тебя настоящая проблема с b? Нет никаких причин для того, чтобы это было чем-то другим, кроме того, что было до цикла. Если вы хотите сбросить b, сбросьте его. Переменная цикла, безусловно, всегда будет такой, какой она должна быть.

Dave Newton 14.02.2023 22:45
b = 1; for (i = 1; i <= num; i++) {
DevilsHnd 14.02.2023 23:27
Лучшая компания по разработке спортивных приложений
Лучшая компания по разработке спортивных приложений
Ищете лучшую компанию по разработке спортивных приложений? Этот список, несомненно, облегчит вашу работу!
Blibli Automation Journey - Как захватить сетевой трафик с помощью утилиты HAR в Selenium 4
Blibli Automation Journey - Как захватить сетевой трафик с помощью утилиты HAR в Selenium 4
Если вы являетесь веб-разработчиком или тестировщиком, вы можете быть знакомы с Selenium, популярным инструментом для автоматизации работы...
Фото ️🔁 Radek Jedynak 🔃 on ️🔁 Unsplash 🔃
Фото ️🔁 Radek Jedynak 🔃 on ️🔁 Unsplash 🔃
Что такое Java 8 Streams API? Java 8 Stream API
Деревья поиска (Алгоритм4 Заметки к учебнику)
Деревья поиска (Алгоритм4 Заметки к учебнику)
(1) Двоичные деревья поиска: среднее lgN, наихудшее N для вставки и поиска.
0
4
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам не нужно выражение switch. Кроме того, объявите переменные в самой узкой области. В этом случае, кроме sc, они должны быть объявлены в цикле do/while или, в случае b, в цикле for.

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        do {
            System.out.println("The starting number is 1.\n");
            System.out.print("Enter a value: ");
            // Input
            int num = sc.nextInt();

            for (int i = 1, b = 1; i <= num; i++) {
                b = b * i;
                // Output
                System.out.printf("%d! = %d\n", i, b);
            }
    
            System.out.print(
                "Run the program again? (Y for Yes, N for No): ");

            String input = sc.next();
    
            if (input.equalsIgnoreCase("N")) {
                System.out.println(
                    "Have a great day!");
                sc.close(); 
                System.exit(0);
            }
        } while (true);
    }

Спасибо, что показали мне, что я делал неправильно с циклом for. Я новичок в Java, и я все еще учусь.

Deraga 18.02.2023 05:19

Другие вопросы по теме