Java BufferedReader readLine () внезапно не работает после read () - PullRequest
0 голосов
/ 10 февраля 2020

У меня сейчас проблема с моим oop. После того, как я однажды ввел строку, он запрашивает пользователя, а когда были выполнены условия l oop, он просто продолжает спрашивать пользователя: «Вы хотите продолжить?» и не смог ввести другую строку.

public static void main(String[] args) throws IOException
{
    BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
    LinkedList<String> strList = new LinkedList();
    char choice;

    do
    {
        System.out.print("Add Content: ");
        strList.add(bfr.readLine());
        System.out.print("Do you want to add again? Y/N?");
        choice = (char)bfr.read();

    }
    while(choice == 'Y');

}

Ответы [ 5 ]

0 голосов
/ 10 февраля 2020

Попробуйте это:

    public static void main(String[] args) throws IOException
        {
        Scanner scan=new Scanner(System.in);
        LinkedList<String> strList = new LinkedList();
        String choice;`

        do
        {
            System.out.print("Add Content: ");
            strList.add(scan.nextLine());
            System.out.print("Do you want to add again? Y/N?");
            choice = scan.nextLine();

        }
        while(choice.equals("Y"));

    }
0 голосов
/ 10 февраля 2020

Эта работа (не забывайте, библиотека):

public static void main(String[] args) throws IOException
{
    BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
    List<String> strList = new ArrayList<String>();
    String choice;

    do {
        System.out.println("Add Content: ");    
        strList.add(bfr.readLine());
        System.out.println("Do you want to add again? Y/N?");
        choice = bfr.readLine();

    } while(choice.equals("Y"));

    System.out.println("End.");

}
0 голосов
/ 10 февраля 2020

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

do
{
    System.out.print("Add Content: ");
    strList.add(bfr.readLine());
    System.out.print("Do you want to add again? Y/N?");
    //choice = (char)bfr.read();

    choice = bfr.readLine().charAt(0); // you might want to check that a character actually has been entered. If no Y or N has been entered, you will get an IndexOutOfBoundsException
 }
 while(choice == 'Y');
0 голосов
/ 10 февраля 2020

Не забывайте, что для чего-то простого, такого как эта программа, вы можете использовать удобный класс java.io.Console.

        Console console = System.console();
        LinkedList<String> list = new LinkedList<>();
        char choice = 'N';

        do {
            System.out.print("Add Content: ");
            list.add(console.readLine());
            System.out.print("Do you want to add again? Y/N?\n");
            choice = console.readLine().charAt(0);

        } while (choice == 'Y' || choice == 'y');
0 голосов
/ 10 февраля 2020

Обычно терминал отправляет данные только после нажатия клавиши ввода. Таким образом, вы получаете пустую строку при повторном выполнении readLine. Вы должны прочитать строку, а затем проверить, содержит ли она Y. Или прочитайте пустую строку впоследствии, в зависимости от того, что вы считаете менее подверженным ошибкам.

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

...