2016-12-23 4 views
0

Программа, которую я создал, не печатает функцию меню из метода 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. 
    } 

} 

ответ

1

Во-первых, ваш цикл while-while в readInt() не работает. while(loop = true) будет устанавливать цикл до true на неопределенный срок. Замените его на while(loop). Во-вторых, что произойдет, если inputNumber не попадает в диапазон? Вы никогда не запрашиваете пользователя для ввода в этом цикле! Поэтому, если они не имеют правильного ввода в первый раз, этот цикл будет работать бесконечно.

В-третьих, почему ваше приглашение напечатано после ваша петля. Вы не хотите запрашивать пользователя раньше?

+0

Благодарим за информацию. Я сейчас сделаю эти изменения и посмотрю, работает ли это. – statsguyz

+0

Сделал корректировки. Теперь у меня проблемы с методом readString. Если я изменил его на next(), он позволяет мне вводить идентификатор StudentID. Тем не менее, он больше не позволит мне выйти после «Пожалуйста, нажмите enter, чтобы продолжить». Если я буду продолжать nextLine() в методе readString, он пропустит «Пожалуйста, введите идентификатор студента» – statsguyz

+0

@statsguyz в вашем коде есть несколько проблем, которые могут дать вам странный результат. Я проверил ваш код, и если вы нажмете enter для выхода, а затем введите число, оно должно работать. Я думаю, что вы видите эту проблему, потому что, как я сказал ранее, вы печатаете свои подсказки * после *, вы получаете свой ввод, который вас смущает. Вы должны положить их раньше. Я думаю, что вы, вероятно, это делаете из-за новой проблемы с строкой, которая иногда приходит со Сканером (см. [Здесь] (http://stackoverflow.com/questions/13102045/scanner-is-skipping-nextline-after-using-next -nextint или-другой-nextfoo)). – Dana