Хотя цикл предназначен для прерывания при нулевом вводе пользователя, не прерывается при нулевом вводе пользователя - PullRequest
0 голосов
/ 29 сентября 2010

Я делаю приложение, которое позволяет людям делать опросы. Моя идея состоит в том, чтобы позволить людям вводить неограниченный выбор для вопроса и сигнализировать, когда они закончат с этим вопросом, нажав Enter на новой строке, после чего я позволю им ввести следующий вопрос и выбор этого вопроса. Я подумал, что нажатие Enter на пустой строке приведет к нулю, и записал условие цикла while для разрыва на ноль, но, как показано ниже, код не обнуляется, но дает право запрашивать у пользователей больше выбор. Тогда я подумал, что, может быть, пустая строка на самом деле "" вместо нуля. Но когда я это делаю ... NullPointerException. Я надеюсь, что здесь есть смысл.

По сути, вопрос в том, как сделать разрыв внутреннего цикла и перейти к следующей итерации внешнего цикла?

Спасибо!

public class Survey implements Serializable {
    String title = "";
    ArrayList<Question> questions;
    String surveyFileName;
//survey entry code
//entry is a Scanner defined in the Main class
while ((currentQn.questionContent = (Main.entry.nextLine())).equals("") == false) {
            currentQn.choices.clear();
            System.out.println("Please enter the text of question " + currentQnNo + ": ");
            String currentChoice = "";
            int currentChoiceNo = 1;
            System.out.println("Please enter choice " + currentChoiceNo + " for question " + currentQnNo + ": ");
            while ((currentChoice = (Main.entry.nextLine())) != null) {
                System.out.println("Please enter choice " + currentChoiceNo + " for question " + currentQnNo + ": ");
                currentQn.choices.add(currentChoice);
                currentChoiceNo++;
            }
            currentQnNo++;
            questions.add(currentQn);
        }

и вот реализация Вопроса:

package surveyor;

import java.io.Serializable;
import java.util.*;

class Question implements Serializable {
    public String questionContent = ""; //initialize these so no NPEs
    public ArrayList<String> choices = new ArrayList<String>();

}

Ответы [ 2 ]

0 голосов
/ 29 сентября 2010

Упс, неважно.NPE не для пустой строки.Это было для ArrayList<Question> questions, которое не было инициализировано.Сканер действительно получает пустую строку, а не ноль.

0 голосов
/ 29 сентября 2010

перед внутренним циклом while

 bool shouldContinue = false;

во внутреннем цикле while

if ("".equals(currentChoice.trim())) {
    shouldContinue = true;
    break;
}

после внутреннего цикла while

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