Исправление бесконечного цикла при вводе пользовательского ввода в Java - PullRequest
0 голосов
/ 26 августа 2018

Я писал свой первый Java-скрипт и столкнулся с проблемой.Я не понимаю, почему, когда это выполняется, программа ждет, когда пользователь введет что-то в первый раз при запуске цикла, затем ввод обрабатывается, и делается соответствующий ответ, но при втором запуске он застревает вбесконечный цикл без ожидания ввода пользователя.Для записи, я хочу, чтобы это был бесконечный цикл, за исключением того, что программа должна завершиться, если пользователь введет «3».Если после каждого случая я пишу "keep_going = false;"программа работает, но не продолжает цикл, очевидно.Спасибо за помощь, спасибо!

import java.io.*; 

class Choice
{ 
public static void main (String[] args) 
{  
    String input = ""; 
    Boolean keep_going = true;
    while (keep_going)
    {
        input = "";
        System.out.println("Welcome to my program! Would you like to:");
        System.out.println("1. Say hi.");
        System.out.println("2. Find out my favourite colour.");
        System.out.println("3. End the program.");
        System.out.println(">");
        System.out.print( "> " );
        InputStreamReader isr = new InputStreamReader( System.in );
        BufferedReader buffer = new BufferedReader( isr );
        try
        { 
            input = buffer.readLine();
            buffer.close() ; 
        } 
        catch (IOException e ) 
        { 
            System.out.println(e);  
        } 
        switch (input)
        {
            case "1": System.out.println("Hi!"); break;
            case "2": System.out.println("My favourite colour is blue!"); break;
            case "3": return;
            default : System.out.println(input + " is not a valid option. Please try again.");
        }
    }


} 

}

1 Ответ

0 голосов
/ 26 августа 2018

бесконечный цикл произошел из-за линии buffer.close() ;

Выполните эти корректировки

  1. удалить buffer.close() ;

    //buffer.close() ;

  2. case "3": keep_going=false;break;

...