2016-03-21 18 views
1

私はレシピについての情報を人々に求めて保存するレシピプログラムを作成しようとしています。 メニューは実行されるcaseステートメントの中にあり、アクセスしようとしているものの番号を押します。しかし、私がボタンを押すたびに、そのオプションの内容をスキップしてメニューに戻ります。私はデバッグしようとしましたが、入力を認識してからメニューに戻るようです。クラスとアクセスしようとする最初のメソッドはあります(ただしできません)簡単なレシピプログラムを作成しようとしています

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"); 
    } 
} 

ここはアクセスしようとしているメンバークラスです。 パッケージpotluck; import java.util.Scanner; パブリッククラスメンバー{だから復習として

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(); 
    } 

。私は瞬間にCREATE_MEMBERオプションを働かせようとしています。何が間違っていても、残りの部分にはおそらく間違っています。

+0

メンバーとは何もしていません。それは作成されるとすぐに破壊されます。実際、 'public void Member()'はコンストラクタではありません。コンストラクターには戻り値の型はありません。これはおそらく 'public Member()'であるべきです。コードに存在しない暗黙のコンストラクタを使用しています。 –

答えて

4

あなたの変数にごMemberを割り当てるされていません。

member = new Member(); 

はまた、あなたがコンストラクタを呼び出すことは、実際には1ではないことに注意してください。あなたはそれが1であるためにvoidを削除する必要があります。

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

あなたは、そのstaticメソッドを呼び出すと同じようMemberクラスを使用します。コンストラクタを呼び出してクラスのインスタンスを作成する必要があります。

Member member = new Member(); 

任意のクラスのコンストラクタは戻り値の型を必要とするので、void単語を削除しません。

public Member() { 
    ... 
} 

あなたは**属するグローバル変数としてあなたMEMBERIDにすべての*インスタンスを1を追加したい場合は、staticとしてその変数を定義する必要があります。したがって:

private static int memberID = 0; 

最後に、addmember(..)メソッドは何もしません。作成されたインスタンスMember member = new Member();内のインスタンス変数を初期化する場合は、コンストラクタを修正するか、多くのセッターを作成する必要があります。

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; 
    } 

... 

} 
関連する問題