Java: цикл с переключателем работает только иногда - Noob - PullRequest
0 голосов
/ 15 октября 2018

Я действительно поцарапал услышанное на этом.Я новичок в Java, и у меня случается самое странное.

Это домашнее задание, и я делаю это по одному шагу за раз.Моя проблема в том, что цикл просто продолжает работать и перестает запрашивать ввод, просто продолжает цикл, пока не завершится.Мои комментарии в основном для меня.Я попытался извлечь то, что вызывало мою проблему, и опубликовать это здесь.

Посмотрите на переключатель "hatColor", и вы заметите, как я проверяю, что пользователь вводит только те параметры, которые я выделил.Должен ли я использовать обработчик исключений или что-то еще?

В любом случае, проблема в том, что если я введу что-то с пробелами, цикл пропускает запрос на мой следующий ввод.Например, если я ввел «yyyyy» в сканер при первом запросе, программа завершит работу и не даст мне возможности ввести что-то еще.

Пожалуйста, всем, кто понимает это, я был бы очень признателен за вашу помощь.

import java.util.Scanner;

public class Testing
{
    static String hatColor;
    public static void main(String[] args) {
    gameStart();    
    }

public static void gameStart() 
{       
    Scanner userInput = new Scanner(System.in);
    boolean keepLooping = true;
    int loopCounter = 0;

    System.out.println("The game begins. You must choose between 3 different colored hats."
            + " You can type white, black, or gray.");

    while (keepLooping == true) 

    {
        hatColor = userInput.next();
        switch(hatColor)
        {
        case "white":
            System.out.println("You have chosen the path of well intentioned decisions.");
            walletDrop();
            //the two items below are only there in case the wallet drop somehow completes without calling another method
            keepLooping = false; // stops the while loop from looping again.
            break; // breaks out of the  switch
        case "gray": 
            System.out.println("You have chosen the path of free will.");
            walletDrop();
            keepLooping = false;
            break;
        case "black" :
            System.out.println("You have chosen the path of personal gain.");
            walletDrop();
            keepLooping = false;
            break;
        default : //we could just copy this default chunk for later switch statements
            if (loopCounter >= 3)//end program on them
            {
                System.exit(0);
            }
            System.out.println("You didn't enter a usable answer. Try again");
            loopCounter++;
            if (loopCounter == 3)
            {
                System.out.println("This program will self destruct if you enter another invalid response.");
            }

        }//end of switch
    }//end of while
}//end of game start method

public static void walletDrop()
{
    System.out.println("wallet drop successful");
}

}

1 Ответ

0 голосов
/ 15 октября 2018

Так что я действительно решил это сразу после публикации.Но я обещаю, я искал несколько часов, прежде чем размещать здесь.Если кому-то еще нужно обратиться за помощью:

Проблема, с которой я столкнулся, была связана с использованием метода сканера

variableToAssign = scannerName.next ();

из

variableToAssign = scannerName.nextLine ();

Я чувствую себя глупо.Извините, что зря потратил время.

...