2016-03-21 5 views
1

Ich versuche ein Rezeptprogramm zu erstellen, das Leute nach Informationen über ein Rezept fragt und speichert. Das Menü ist in einer Case-Anweisung, die gerade ausgeführt wird und sie drücken die Nummer für das Ding, auf das sie zugreifen möchten. Aber wann immer ich irgendwelche Knöpfe drücke, überspringt es einfach was in dieser Option ist und geht zurück zum Menü. Ich habe versucht, zu debuggen, aber es scheint, als ob es die Eingabe erkennt und dann zurück zum Menü sowieso geht. Hier ist die Klasse und die erste Methode versucht, darauf zuzugreifen (aber nicht)Ich versuche ein einfaches Rezeptprogramm zu erstellen

package potluck; 
import java.util.*; 

import potluck.*; 

public class Controller { 
    private Scanner input; 
    private Member member; 
    private AdminMember admin; 

    private final static int USER_LOGIN = 0; 
    private final static int CREATE_MEMBER = 1; 
    private final static int CREATE_ADMIN = 2; 
    private final static int CREATE_RECIPE = 3; 
    private final static int COMMENT = 4; 
    private final static int DELETE_RECIPE = 5; 
    private final static int EXIT = 8; 

    public Controller(){ 
     input = new Scanner(System.in); 
     startUp();//no better name to be thought of 
    } 

    public void startUp() { 
     // TODO Auto-generated method stub 
     int choice; 
     do { 
      this.displayMenu(); 
      choice = input.nextInt(); 
      input.nextLine();// clears carriage return 
      //depending on choice takes to a different menu 
      switch (choice) { 
//    case USER_LOGIN: 
//     member.enterPassword(); 
//     break; 
     case CREATE_MEMBER: 
      new Member(); 
      break; 
     case CREATE_ADMIN: 
      Member.addAdmin(); 
      break; 
     case CREATE_RECIPE: 
      Recipe.addRecipe(); 
      break; 
     case COMMENT: 
      Recipe.addComment(); 
      break; 
     case DELETE_RECIPE: 
      Recipe.deleteRecipe(); 
      break; 
     case EXIT: 
      System.out.println("Thanks for using our software"); 
      System.exit(choice); 
      break; 
     default: 
      System.out.println("Error, Invalid selection."); 
     } 
    } while (choice != 8); //choice 8 exits 
} 
private void displayMenu() { 
    System.out.println("1 Create Member"); 
    System.out.println("2 Create Admin Member"); 
    System.out.println("3 Create Recipe"); 
    System.out.println("4 Leave Comment"); 
    System.out.println("5 Delete Recipe"); 
    System.out.println("8 Exit"); 
    System.out.println("Please enter menu option, to exit enter 8"); 
    } 
} 

hier ist das Mitglied Klasse versucht, darauf zuzugreifen. paket potluck; Import java.util.Scanner; public class Mitglied {

private int memberID = 0; 
private String name; 
private String alias; 
private String email; 
private String username; 
private String password; 
private Scanner scanner = new Scanner (System.in); 

public void Member(){ //constructor 
    memberID =+ 1; 
    name = ""; 
    alias = ""; 
    email = ""; 
    username = ""; 
    password = ""; 

    setName(); 
    setAlias(); 
    setEmail(); 
    setUsername(); 
    setPassword(); 
    System.out.println("Member Created"); 
    } 

    public void addMember() { 
    new Member(); 
    } 

Also nur als rekapitulieren. Ich versuche nur, die Option CREATE_MEMBER im Moment zu verwenden. was auch immer falsch ist, ist wahrscheinlich auch falsch mit dem Rest.

+0

Sie tun nichts mit dem Mitglied. Es ist zerstört, sobald es erstellt wird. In der Tat ist 'public void Member()' kein Konstruktor. Konstruktoren haben keinen Rückgabetyp. Dies sollte wahrscheinlich "public Member()" sein. Sie verwenden einen impliziten Konstruktor, der nicht im Code vorhanden ist. –

Antwort

4

Sie zuweisen nicht Ihre Member auf Ihre Variable:

member = new Member(); 

Beachten Sie auch, dass das, was Sie ein Konstruktor nennen, ist in der Tat nicht ein. Sie müssen die void entfernen, um es zu sein:

public Member() { //constructor 
    // code 
} 
2

Sie verwenden die Member Klasse wie mit seinem Aufruf static Methoden. Sie müssen den Konstruktor aufrufen und die Instanz Ihrer Klasse erstellen.

Member member = new Member(); 

Der Konstruktor einer Klasse erfordert nicht den Rückgabetyp, so löschen Sie das void Wort.

public Member() { 
    ... 
} 

Wenn Sie 1 auf Ihre memberID als globale Variable hinzufügen möchten, dass alle gehört ** * Instanzen, müssen Sie diese Variable als static definieren. Also:

private static int memberID = 0; 

Und schließlich Ihre addmember(..) Methode tut nichts. Wenn Sie die Instanzvariablen in der erstellten Instanz Member member = new Member(); initialisieren möchten, müssen Sie Ihren Konstruktor ändern oder viele Setter erstellen.

public class Member { 

    // constructor 
    public Member(String name, String alias ...) { 
     this.name = name; 
     this.alias = alias; 

     ... 

    } 

    // setters 
    public void setName(String name) { 
     this.name = name; 
    } 

    public void setAlias(String alias) { 
     this.alias = alias; 
    } 

... 

}