Печать в файл из пользовательского ввода несколькими строками? - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь написать программу, которая просит пользователя указать имя лимерика, которое он хотел бы сохранить, затем создает файл с именем этого лимерика, а затем просит его написать лимерик, который будетзатем сохраните в файл.У меня есть этот код для создания файла, но когда я пытаюсь записать лимерик в файл, он, кажется, попадает в цикл и постоянно находится в первой строке, введенной в файл.Любая помощь будет очень ценится?

public void start () {
    System.out.println("<<THIS PROGRAM SAVES A LIMERICK THAT YOU HAVE WROTE>>");
}    

public File create () {
    System.out.println("<<ENTER THE NAME OF THE LIMERICK>>");
    name = scan.nextLine();
    nameFile = name + ".txt";
    File file = new File(nameFile);
    try {
        if (file.createNewFile() ) {
            System.out.println("<<FILE CREATED>>");
        } else {
            System.out.println("<<FILE ALREADY EXISTS>>");
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return file;
}

public void write () {
    Limerick write = new Limerick();
    File file = write.create();
    System.out.println("<<ENTER THE LIMIRICK>>");
    PrintWriter pw;
    try {
        pw = new PrintWriter (new BufferedWriter (new FileWriter(file)));
        limerick = scan.nextLine();
        while (!(limerick.equals("DONE"))) {
            pw.println(limerick);
        }
        pw.close();
        System.out.println("<<LIMERICK WRITTEN TO FILE>>");
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }   
}

public static void main (String args[]) {       
    Limerick method = new Limerick();
    method.start();
    method.write();

}

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Вам нужно запустить scan.nextLine() внутри цикла:

    while (!((limerick = scan.nextLine()).equals("DONE"))) {
        pw.println(limerick);
    }
0 голосов
/ 05 декабря 2018

В следующем цикле значение limerick никогда не обновляется и, следовательно, оно входит в бесконечный цикл

while (!(limerick.equals("DONE"))) {
    pw.println(limerick);
}

Измените его на что-то вроде этого:

while (!(limerick.equals("DONE"))) {
    pw.println(limerick);
    limerick = scan.nextLine();
}

Таким образом, после каждогоитерация значение limerick обновляется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...