2017-10-09 86 views
1

出于某种原因,在添加一个名为“Oliver”的宠物后,主菜单将打印出两次“无效选择”行。我只是需要另一双眼睛来看它,因为我一直在看它几个小时,并一直在修正一些小错误,无济于事。由于某种奇怪的原因被调用两次?

代码时RAN看起来是这样的:

 /*Welcome to the pet store.Type the letter to make your selection 
     A. List the pets in the store. 
     B. Age up the pets 
     C. Add a new pet 
     D. Adopt a pet 
     E. Quit 
     C 
     Please type in a name 
     Oliver 
     Please type in an age 
     22 
     Oliver has just been added to the store! 
     Welcome to the pet store.Type the letter to make your selection 
     A. List the pets in the store. 
     B. Age up the pets 
     C. Add a new pet 
     D. Adopt a pet 
     E. Quit 
     Invalid choice 
     Welcome to the pet store.Type the letter to make your selection 
     A. List the pets in the store. 
     B. Age up the pets 
     C. Add a new pet 
     D. Adopt a pet 
     E. Quit*/ 

这里是我的主类代码:

private static void mainmenu(){ 
    System.out.println("Welcome to the pet store.Type the letter to make 
    your selection"); 
    System.out.println("A."+" " + "List the pets in the store."); 
    System.out.println("B."+" " + "Age up the pets"); 
    System.out.println("C."+" " + "Add a new pet"); 
    System.out.println("D."+" " + "Adopt a pet"); 
    System.out.println("E."+" " + "Quit"); 

    MainPets.Getuserinput(); 

} 

public static String Getuserinput(){ 

    userinput=scan.nextLine(); 

    return userinput; 

} 

    public static void main (String [] args){ 
    int pet3age; 
    String pet3name; 
    Pet Pet1=new Pet("Fido",3); 
    Pet Pet2=new Pet("Furball",1); 
    Pet Pet3=null; 
    int userinputint; 

    MainPets.mainmenu(); 


    while(userinput.equals("A")||userinput.equals("B")||userinput.equals("C")||userinput.equals("D")||userinput.equals("E")){ 

     switch(userinput){ 
     case "C": 

      if (Pet3!=null&&userinput.equals("C")){ 
       System.out.println("Sorry the store is full"); 
      } 

      if(Pet3==null){ 
       System.out.println("Please type in a name"); 
       pet3name=scan.nextLine(); 
       System.out.println("Please type in an age"); 
       pet3age=scan.nextInt(); 
       Pet3=new Pet(pet3name,pet3age); 
       System.out.println(pet3name + " has just been added to the store!"); 
      } 
      MainPets.mainmenu(); 
      break; 
      } 
      } 
     while(!userinput.equals("A")||!userinput.equals("B")||!userinput.equals("C")||!userinput.equals("D")||!userinput.equals("E")){ 
     System.out.println("Invalid choice"); 
     MainPets.mainmenu(); 
    } 

这里是所有方法的类:

public class Pet { 
String Name; 
String AdoptionStatus; 
int Age; 

public Pet() {} 

public Pet(String Name, int Age) { 
    this.Name = Name; 
    this.Age = Age; 
} 

public void SetName(String namesetup) { 
    Name = namesetup; 
} 

public String GetName() { 
    return Name; 
} 

public int GetAge() { 
    return Age; 
} 

public int ageincrease() { 
    return Age++; 
} 

public String Getadoptionstatus() { 
    return AdoptionStatus; 
} 

public void Setadoptionstatustonotadopted(int petnumber) { 
    AdoptionStatus="not adopted"; 
} 

public void Setadoptionstatustoadopted(int petnumber){ 
    AdoptionStatus="adopted"; 
} 

} 
+4

请阅读关于Java命名conventins。它几乎觉得你故意违反了他们。 Serioulsy:你写代码的方式让我转身去做其他的事情...... – GhostCat

+0

[Scanner在使用next(),nextInt()或其他nextFoo()之后跳过nextLine()?](https:/ /stackoverflow.com/questions/13102045/scanner-is-skipping-nextline-after-using-next-nextint-or-other-nextfoo) –

+1

你没有使用开关吗?如果你首先仔细检查编译错误... –

回答

0

它看起来像你试图尽可能多地使用static来练习它所做的事情?

无论如何,请参阅下文,了解您可以建立的最小示例(即,您可以多次输入“C”来添加新宠物)。

static String petname, petage; 
    public static void main(String[] args) { 
     initialText(); 
     String userinput = userInput(); 
     while (userinput.equals("A") || userinput.equals("B") || userinput.equals("C") || userinput.equals("D") || userinput.equals("E")) { 
      if(userinput.equals("C")){ 
       System.out.println("Please type in a name"); 
       petname = userInput(); 
       System.out.println("Please type in an age"); 
       petage = userInput(); 
       Pet p = new Pet(petname, petage); 
       System.out.println(petname + " has been added to the store."); 
      } 
      else{ 
       System.out.println("Option not configured yet"); 
       //TODO - the rest of the options 
      } 
      initialText(); 
      userinput = userInput(); 
     } 
    } 

    public static void initialText() { 
     System.out.println("Welcome to the pet store.Type the letter to make your selection"); 
     System.out.println("A." + " " + "List the pets in the store."); 
     System.out.println("B." + " " + "Age up the pets"); 
     System.out.println("C." + " " + "Add a new pet"); 
     System.out.println("D." + " " + "Adopt a pet"); 
     System.out.println("E." + " " + "Quit"); 
    } 

    public static String userInput(){ 
     Scanner s = new Scanner(System.in); 
     return s.nextLine(); 
    } 

这绝不是完美的,只是很快将它敲在一起,给你一个工作的机会。

+0

注意:我在'Pet'类中有'age'作为字符串,但是这很容易改变。 – notyou

相关问题