Пользователь должен выйти из цикла while, когда нажимает ввод в новой строке.но это не работает, и это продолжает идти к новым линиям - PullRequest
3 голосов
/ 04 апреля 2019

Мне нужно сделать следующее упражнение: а) Создать новый текстовый файл б) Поместите ввод пользователя в этот текстовый файл c) мы должны сохранить все введенные пользователем данные, пока пользователь продолжает печатать, но как только пользователь нажимает Enter в новой строке (когда отправляется пустая строка), пользователь должен выйти из программы. Для кодирования этой проблемы я должен написать следующие коды, но когда Я пробую это сам, поэтому я застрял в цикле while, не могу выйти при отправке пустой строки Так может кто-нибудь помочь с решением этой проблемы?

Спасибо

Я пробовал некоторые решения, которые я нашел на youtube, такие как создание оператора if внутри цикла while или добавление кода, который принимает ввод пользователя внутри условия цикла. Поэтому я не знаю, что делать на следующем этапе. Я попытался увидеть окно консоли через выход Eclipse.


import java.io.*;
import java.util.Scanner;
public class lesson {
    public static void main(String[] args) throws IOException {

        File file = new File("mytext.txt");

        if (file.exists() == false) {
            file.createNewFile();
        }
        PrintWriter pw = new PrintWriter(file);
        System.out.println("Enter a text here: ");
        String str;
         while (true) {
             Scanner input = new Scanner(System.in);
            str = input.next();
            pw.println();
            if (str.equals(null)) {
                break;
            }
        } 
        pw.close();
        System.out.println("Done");
    } 
}

Пользователь должен выйти из цикла, когда он отправляет пустую строку. и запись в файл должна быть закончена.

Ответы [ 2 ]

1 голос
/ 04 апреля 2019

Сначала код, потом объяснение ...

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;

public class Lesson {
    public static void main(String[] args) {
        File file = new File("mytext.txt");
        try (Scanner input = new Scanner(System.in);
             PrintWriter pw = new PrintWriter(file)) {
            System.out.println("Enter a text here: ");
            String str = input.nextLine();
            while (str.length() > 0) {
                pw.println(str);
                pw.flush();
                str = input.nextLine();
            }
        }
        catch (IOException xIo) {
            xIo.printStackTrace();
        }
        System.out.println("Done");
    }
}

Для приведенного выше кода требуется как минимум Java 7, поскольку он использует try-with-resources . Scanner должен быть закрыт, точно так же, как PrintWriter должен быть закрыт. try-with-resources гарантирует, что они закрыты. Обратите внимание, что если файл mytext.txt не существует, создание нового PrintWriter также создаст файл, а если файл уже существует, его содержимое будет удалено и заменено введенным вами текстом.

После этого появится приглашение, т. Е. Введите здесь текст , и пользователь введет строку текста. Метод nextLine() будет получать весь введенный текст, пока пользователь не нажмет Enter. Я прочитал ваш вопрос еще раз, и программа должна выйти, когда пользователь нажимает Enter без ввода текста . Когда пользователь делает это, str является пустой строкой, то есть имеет нулевую длину. Это означает, что мне нужно присвоить значение str перед циклом while, следовательно, первый вызов метода nextLine() перед циклом while.

Внутри цикла while я записываю введенное пользователем значение в файл mytext.txt и затем жду, пока пользователь введет еще одну строку текста. Если пользователь нажимает Enter без ввода текста, str будет иметь нулевую длину и цикл while завершится.

Написано и протестировано с использованием JDK 12 для Windows 10 с использованием Eclipse для разработчиков Java, версия 2019-03.

1 голос
/ 04 апреля 2019

Для этого мы проверяем длину ввода> 0:

import java.io.*;
import java.util.Scanner;
public class lesson {
    public static void main(String[] args) throws IOException {

        File file = new File("mytext.txt");

        if (file.exists() == false) {
            file.createNewFile();
        }
        PrintWriter pw = new PrintWriter(file);
        System.out.println("Enter a text here: ");
        String str;
        Scanner input = new Scanner(System.in);
        while ((str = input.nextLine()).length() > 0) {
             //str = input.next();
             pw.println(str);
        } 
        pw.close();
        System.out.println("Done");
    } 
}
...