Программа, которую я создал, не печатает функцию меню из метода run в классе ClassRosterController. Я запустил отладчик в Netbeans, но я не смог определить, в чем проблема. Любая помощь приветствуется.Java App не печатает меню на экран
package classroster;
import ClassRosterController.ClassRosterController;
public class App {
public static void main(String[] args) {
ClassRosterController controller = new ClassRosterController();
controller.run();
}
}
package ClassRosterController;
import ClassRoster.dao.ClassRosterDao;
import ClassRoster.dao.ClassRosterDaoImpl;
import ClassRoster.dto.Student;
import ClassRoster.ui.ClassRosterView;
import ClassRoster.ui.UserIO;
import ClassRoster.ui.UserIOConsoleImpl;
import java.util.List;
public class ClassRosterController {
ClassRosterView view = new ClassRosterView();
ClassRosterDao dao = new ClassRosterDaoImpl();
UserIO io = new UserIOConsoleImpl();
public void run() {
boolean keepGoing = true;
int menuSelection = 0;
while (keepGoing) {
menuSelection = getMenuSelection();
io.print("Main Menu");
io.print("1. List Student IDs");
io.print("2. Create New Student");
io.print("3. View a Student");
io.print("4. Remove a Student");
io.print("5. Exit");
menuSelection = io.readInt("Please select from the above choices.", 1, 5);
switch (menuSelection) {
case 1:
listStudents();
break;
case 2:
createStudent();
break;
case 3:
io.print("VIEW STUDENT");
break;
case 4:
io.print("REMOVE STUDENT");
break;
case 5:
keepGoing = false;
break;
default:
io.print("UNKNOWN COMMAND");
}
}
io.print("GOOD BYE");
}
private void listStudents(){
List<Student> studentList = dao.getAllStudents();
view.displayStudentList(studentList);
}
private int getMenuSelection() {
return view.printMenuAndGetSelection();
}
private void createStudent(){
view.displayCreatesStudentBanner();
Student newStudent = view.getNewStudentInfo();
dao.addStudent(newStudent.getStudentId(), newStudent);
view.displayCreateSuccessBanner();
}
}
package ClassRoster.ui;
import ClassRoster.dto.Student;
import java.util.List;
public class ClassRosterView {
private UserIO io = new UserIOConsoleImpl();
public int printMenuAndGetSelection() {
io.print("");
io.print("");
io.print("");
io.print("");
io.print("");
io.print("");
return io.readInt("Please select from the above choices.", 1, 5);
}
public Student getNewStudentInfo(){
String studentId = io.readString("Please enter Student ID");
String firstName = io.readString("Please enter First Name");
String lastName = io.readString("Please enter Last Name");
String cohort = io.readString("Please enter Cohort");
Student currentStudent = new Student(studentId);
currentStudent.setFirstName(firstName);
currentStudent.setLastName(lastName);
currentStudent.setCohort(cohort);
return currentStudent;
}
public void displayCreatesStudentBanner(){
io.print("=== Create Student ===");
}
public void displayCreateSuccessBanner(){
io.readString("Student successfully created. Please hit enter to continue.");
}
public void displayStudentList(List<Student> studentList){
for (Student currentStudent: studentList){
io.print(currentStudent.getStudentId() + ": "
+currentStudent.getFirstName() + " "
+currentStudent.getLastName());
}
io.readString("Please hit enter to continue.");
}
public void displayAllBanner(){
io.print("=== Display All Students ===");
}
}
package ClassRoster.ui;
public interface UserIO {
void print(String msg);
double readDouble(String prompt);
double readDouble(String prompt, double min, double max);
float readFloat(String prompt);
float readFloat(String prompt, float min, float max);
int readInt(String prompt);
int readInt(String prompt, int min, int max);
long readLong(String prompt);
long readLong(String prompt, long min, long max);
String readString(String prompt);
}
package ClassRoster.ui;
import java.util.Scanner;
public class UserIOConsoleImpl implements UserIO {
Scanner userInput = new Scanner(System.in);
@Override
public void print(String msg) {
System.out.println(msg);
}
@Override
public double readDouble(String prompt) {
System.out.println(prompt);
double inputNumber = userInput.nextDouble();
return inputNumber;
}
@Override
public double readDouble(String prompt, double min, double max) {
System.out.println(prompt);
double inputNumber = userInput.nextDouble();
boolean loop = true;
do{
if(inputNumber < min || inputNumber > max){
System.out.println("Please enter a number between " + min +" and " + max);
}
else {
loop = false;
}
}while(loop);
return inputNumber;
}
@Override
public float readFloat(String prompt) {
System.out.println(prompt);
float inputNumber = userInput.nextFloat();
return inputNumber;
}
@Override
public float readFloat(String prompt, float min, float max) {
System.out.println(prompt);
float inputNumber = userInput.nextFloat();
boolean loop = true;
do{
if(inputNumber < min || inputNumber > max){
System.out.println("Please enter a number between " + min +" and " + max);
}
else {
loop = false;
}
}while(loop);
return inputNumber;
}
@Override
public int readInt(String prompt) {
System.out.println(prompt);
int inputNumber = userInput.nextInt();
return inputNumber;
}
@Override
public int readInt(String prompt, int min, int max) {
System.out.println(prompt);
int inputNumber = userInput.nextInt();
boolean loop = true;
do{
if(inputNumber < min || inputNumber > max){
System.out.println("Please enter a number between " + min +" and " + max);
}
else {
loop = false;
}
}while(loop);
return inputNumber;
}
@Override
public long readLong(String prompt) {
System.out.println(prompt);
long inputNumber = userInput.nextLong();
return inputNumber;
}
@Override
public long readLong(String prompt, long min, long max) {
System.out.println(prompt);
long inputNumber = userInput.nextLong();
boolean loop = true;
do{
if(inputNumber < min || inputNumber > max){
System.out.println("Please enter a number between " + min +" and " + max);
}
else {
loop = false;
}
}while(loop);
return inputNumber;
}
@Override
public String readString(String prompt) {
System.out.println(prompt);
String inputString = userInput.nextLine();
return inputString;
}
}
package ClassRoster.dto;
public class Student {
private String firstName;
private String lastName;
private String studentId;
private String cohort;
public Student(String studentId){
this.studentId = studentId;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getStudentId() {
return studentId;
}
public String getCohort() {
return cohort;
}
public void setCohort(String cohort) {
this.cohort = cohort;
}
}
package ClassRoster.dao;
import ClassRoster.dto.Student;
import java.util.List;
public interface ClassRosterDao {
Student addStudent(String studentId, Student student);
List<Student> getAllStudents();
Student getStudent(String studentId);
Student removeStudent(String studentId);
}
package ClassRoster.dao;
import ClassRoster.dto.Student;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ClassRosterDaoImpl implements ClassRosterDao {
private Map<String, Student> students = new HashMap<>();
@Override
public Student addStudent(String studentId, Student student) {
Student newStudent = students.put(studentId, student);
return newStudent;
}
@Override
public List<Student> getAllStudents() {
return new ArrayList<Student>(students.values());
}
@Override
public Student getStudent(String studentId) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public Student removeStudent(String studentId) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}
Благодарим за информацию. Я сейчас сделаю эти изменения и посмотрю, работает ли это. – statsguyz
Сделал корректировки. Теперь у меня проблемы с методом readString. Если я изменил его на next(), он позволяет мне вводить идентификатор StudentID. Тем не менее, он больше не позволит мне выйти после «Пожалуйста, нажмите enter, чтобы продолжить». Если я буду продолжать nextLine() в методе readString, он пропустит «Пожалуйста, введите идентификатор студента» – statsguyz
@statsguyz в вашем коде есть несколько проблем, которые могут дать вам странный результат. Я проверил ваш код, и если вы нажмете enter для выхода, а затем введите число, оно должно работать. Я думаю, что вы видите эту проблему, потому что, как я сказал ранее, вы печатаете свои подсказки * после *, вы получаете свой ввод, который вас смущает. Вы должны положить их раньше. Я думаю, что вы, вероятно, это делаете из-за новой проблемы с строкой, которая иногда приходит со Сканером (см. [Здесь] (http://stackoverflow.com/questions/13102045/scanner-is-skipping-nextline-after-using-next -nextint или-другой-nextfoo)). – Dana