Я пытаюсь снова зациклить мой переключатель case, если они получают значение по умолчанию

    //Choice of choosing a dog or a cat

     String pet = input.next();

    switch (pet.charAt(0)) {
        case 'a' -> {
            System.out.println("What is your dog's name? ");
            String dogsName = input.next();
            System.out.println("Your Character's Name is: " + playerName + "\nYour Pet's Name is: " + dogsName);
        }
        case 'b' -> {
            System.out.println("What is your cat's name? ");
            String catsName = input.next();
            System.out.println("Character Name: " + playerName + "\nPet Name: " + catsName);
        }
        default -> System.out.println("That is not a valid option. Please choose again.");
    }

   input.close();

}

Я не могу найти цикл для использования, который бы возвращал его к случаю а и повторял, пока пользователь не ответит, используя один из вариантов. Любая помощь была бы потрясающей! Спасибо


person SunnyOlives    schedule 17.08.2020    source источник


Ответы (3)


Использование цикла do while — простой способ решить эту проблему.

Я использовал переменную repeat для проверки, нужно ли мне снова запрашивать ввод или нет

Также обратите внимание, что теперь, даже если я добавлю еще один случай (скажем, case 'c'), мне не нужно изменять условие для моего цикла do while

boolean repeat;
do {
    String pet = input.next();
    repeat = false;
    switch (pet.charAt(0)) {
        case 'a' -> {
            System.out.println("What is your dog's name? ");
            String dogsName = input.next();
            System.out.println("Your Character's Name is: " + playerName + "\nYour Pet's Name is: " + dogsName);
        }
        case 'b'-> {
            System.out.println("What is your cat's name? ");
            String catsName = input.next();
            System.out.println("Character Name: " + playerName + "\nPet Name: " + catsName);
        }
        default: System.out.println("That is not a valid option. Please choose again.");
        repeat = true;
    }
} while(repeat);
input.close();
person Lovesh Dongre    schedule 17.08.2020
comment
Это решение также спамит по умолчанию, но спасибо. - person SunnyOlives; 17.08.2020

Зацикливание — хорошее решение, но вы также можете использовать рецессивные методы в java.

public static void main(String[] args) {
    
        Scanner input = new Scanner(System.in);
    
    
        System.out.println("    Welcome To The Choices Game...    ");
        System.out.println("Please enter your name: " );
    
        String playerName = input.nextLine();
    
        System.out.println("What is " + playerName + "'s" + " favorite pet?");
        System.out.println("a. Dog \nb. Cat");
    
        //Choice of choosing a dog or a cat
    
        method();
   
    
      input.close();
    
 }

public void method()
{

         String pet = input.next();
    
        switch (pet.charAt(0)) {
            case 'a' -> {
                System.out.println("What is your dog's name? ");
                String dogsName = input.next();
                System.out.println("Your Character's Name is: " + playerName + "\nYour Pet's Name is: " + dogsName);
            }
            case 'b' -> {
                System.out.println("What is your cat's name? ");
                String catsName = input.next();
                System.out.println("Character Name: " + playerName + "\nPet Name: " + catsName);
            }
            default -> System.out.println("That is not a valid option. Please choose again.");
            method();
        }
       
}
person Anvesh K    schedule 17.08.2020

Чтобы зациклить весь раздел switch-case, вы можете попробовать поместить его в цикл do-while. Что касается условия для использования с блоком do-while, вы можете попробовать: - do {...}while(pet.charAt(0)!='a' || pet.charAt(0)!='b');

Я предлагаю вам возможное решение ниже: -

   public static void main(String[] args) {

    Scanner input = new Scanner(System.in);


    System.out.println("    Welcome To The Choices Game...    ");
    System.out.println("Please enter your name: " );

    String playerName = input.nextLine();

    System.out.println("What is " + playerName + "'s" + " favorite pet?");
    System.out.println("a. Dog \nb. Cat");

    //Choice of choosing a dog or a cat

    do{
     String pet = input.next();

    switch (pet.charAt(0)) {
        case 'a' -> {
            System.out.println("What is your dog's name? ");
            String dogsName = input.next();
            System.out.println("Your Character's Name is: " + playerName + "\nYour Pet's Name is: " + dogsName);
            break;}
        case 'b' -> {
            System.out.println("What is your cat's name? ");
            String catsName = input.next();
            System.out.println("Character Name: " + playerName + "\nPet Name: " + catsName);
            break;}
        default -> System.out.println("That is not a valid option. Please choose again.");
    }
   
}while(pet.charAt(0)!='a' && pet.charAt(0)!='b');

  input.close();

}

person Srinjoy_Chatterjee37    schedule 17.08.2020
comment
Я бы установил логический флаг isWrongAnswer, для которого установлено значение true в случае по умолчанию и значение false в правильных случаях. Таким образом, вы не проверяете «a» или «b» избыточно. - person Raildex; 17.08.2020
comment
Да, это еще одно доступное решение. Вместо проверки введенного символа вы можете проверить значение логического флага. - person Srinjoy_Chatterjee37; 17.08.2020
comment
Спасибо, но когда я использовал это решение, оно снова и снова рассылало спам по умолчанию. - person SunnyOlives; 17.08.2020
comment
Я отредактировал код. Произошла логическая ошибка в условии while блока do-while. Это должно работать нормально. - person Srinjoy_Chatterjee37; 17.08.2020
comment
Спасибо еще раз!! Но по какой-то причине он продолжает иметь ту же проблему :/ - person SunnyOlives; 17.08.2020
comment
Это связано с тем, что в вашем коде switch-case нет инструкции «break». Таким образом, у вас происходит «провал» к случаю по умолчанию, даже если пользователь вводит «a» или «b». Добавьте оператор «break» после случаев «a» и «b», чтобы избежать этой проблемы. У меня это работало нормально с операторами «перерыва», вставленными в конце каждого случая. - person Srinjoy_Chatterjee37; 17.08.2020
comment
Я все еще пытался, и у меня продолжает возникать та же проблема, даже после того, как я попытался использовать разрывы в делах. - person SunnyOlives; 17.08.2020