1

Javaコンソールメニューを作成しようとしていますが、コンソールでレンダリングできません。これが私がこれまでに書いたコードです。

package com.registrar;

import java.util.*;

class GUIMenu {
private Course[] courses = new Course[100];
private Person[] persons = new Person[1000];

public void display_menu() {
  System.out.println("****************MENU*****************");
  System.out.println("[1] Add Course\n[2] Add Student to Course \n[3] Verify Registration \n[4] Remove Student \n[5] Add Persons");
  System.out.println("**************************************");
  System.out.println("Selection: ");
}

public GUIMenu(){
Person p = null;
Scanner in = new Scanner (System.in);
int input = in.nextInt();

switch (input){
  case 1:
    Scanner sc = new Scanner(System.in);
    System.out.println("Enter Course Name: ");
    String name = sc.nextLine();
    System.out.println("Enter Course ID:");
    Integer cID = sc.nextInt();
    System.out.println("Enter Instructor ID:");
    Integer pn = sc.nextInt();
    for(int i = 0; i < persons.length; i ++){
        System.out.println(persons[i]);
    }
    for(int i = 0; i<persons.length; i++){
        if(persons[i] !=null){
            if(persons[i].getId().intValue() == pn){
                System.out.println("Record Found");
                p  = persons[i];
            }
            else
                System.out.println("Record Not Found");
        }
    }
    Course c = new Course(name, cID);
    if(p!=null){
        Instructor ins = new Instructor(p);
        c.setInstructor(ins);
    }
    System.out.println(c + " has been created");

    for(int i = 0; i < courses.length; i ++){
        if(courses[i] == null){
            courses[i] = c;
            break;
        }
    }
    new GUIMenu();
  case 2:
      for(int i = 0; i < courses.length; i ++){
          if(courses[i] != null)
              System.out.println(courses[i]);
      }
      break;
  case 3:
    System.out.println ( "You picked option 3" );
    break;
  case 4:
    System.out.println ( "You picked option 4" );
    break;
  case 5:
      Scanner pers = new Scanner(System.in);
      System.out.println("Enter Person Name: ");
      String pname = pers.nextLine();
      System.out.println("Enter Person ID:");
      Integer oiID = pers.nextInt();
      Person per = new Person(pname, oiID);
      for(int i = 0; i < persons.length; i ++){
        if(persons[i] == null){
            persons[i] = per;
            break;
        }
      }
      display_menu();
  default:
    System.err.println("Unrecognized option");
}
}

public static void main ( String[] args ) {
    GUIMenu a = new GUIMenu();
    a.display_menu();
}
}

メニューで選択した後、その特定の選択に関連付けられたコードを完了した後、コードが再びメニューを返すようにしようとしています。私は何を間違っていますか?メニューがまったく表示されません。

4

1 に答える 1

2

私は何を間違っていますか?

コードを見てください:これが始まりです:

public static void main ( String[] args ) {
    GUIMenu a = new GUIMenu();  // This is executed first...
    a.display_menu();
}

それを見てみましょう

public GUIMenu(){
    Person p = null;
    Scanner in = new Scanner (System.in);
    int input = in.nextInt(); // this is where it's waiting for your input.
    ...

コードのフローを見ると、メニューが表示されない理由はかなり明らかです。

編集:

あなたはこのようなものを探しています:

public void runApplication() {
    // init Scanner
    boolean nextRound = true;
    while(nextRound) {
        displayMenu();
        int input = sc.nextInt();
        switch(input) {
            case 1: // do stuff
                break;
            case 2: // this is the exit command
                nextRound = false;
                break;
            // more cases
            default:
                // undefined input
        }
    }
}

したがって、コンストラクターはコンストラクター関連のコードにのみ使用し、後でrunApplication()メソッドを呼び出します。

于 2013-01-27T00:54:52.677 に答える