Alright, very noob question. I’m making a CLI app that lets users design surveys. First they enter the question, then the number of choices and the choices. I’m using a Scanner to get input, and for some reason it lets the user enter most things, but not the text of the question. Code snippet below.
String title = "";
Question[] questions;
int noOfQuestions = 0;
int[] noOfChoices;
Scanner entry = new Scanner(System.in);
System.out.println("Please enter the title of the survey: ");
title = entry.nextLine();
System.out.println("Please enter the number of questions: ");
noOfQuestions = entry.nextInt();
noOfChoices = new int[noOfQuestions];
questions = new Question[noOfQuestions];
for (int i = 0; i < noOfQuestions; i++) {
questions[i] = new Question();
}
for (int i = 0; i < noOfQuestions; i++) {
System.out.println("Please enter the text of question " + (i + 1) + ": ");
questions[i].questionContent = entry.nextLine();
System.out.println("Please enter the number of choices for question " + (i + 1) + ": ");
questions[i].choices = new String[entry.nextInt()];
for (int j = 0; j < questions[i].choices.length; j++) {
System.out.println("Please enter choice " + (j + 1) + " for question " + (i + 1) + ": ");
questions[i].choices[j] = entry.nextLine();
}
}
Thanks 🙂
The reason I asked about whether you read
noOfQuestionsfrom the Scanner is becauseScanner.nextInt()does not consume the delimiter (e.g. the new line).That means that the next time you call
nextLine(), you will just get an empty String from the previousreadInt().My suggestion is to just read by line, always with
nextLine(), and then parse afterwards usingInteger.parseInt().If that’s the route you take, there’s little need for a Scanner at all; you can just accept a BufferedReader.