2017-10-09 5 views
1

Pour une raison quelconque, après avoir ajouté un animal de compagnie nommé "Oliver" le menu principal imprime deux fois avec la ligne "choix invalide" avec elle. J'ai juste besoin d'un autre ensemble d'yeux pour le regarder parce que je l'ai regardé pendant des heures et réparé de petites erreurs en vain.Méthode appelée deux fois pour une raison étrange?

Le code quand RAN ressemble à ceci:

 /*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*/ 

Voici mon code principal de classe:

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

Voici la classe avec toutes les méthodes:

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

S'il vous plaît lire à propos de java nommage conventins. On a presque l'impression de les violer intentionnellement. Serioulsy: comment vous avez écrit votre code me fait faire demi-tour et faire autre chose ... – GhostCat

+0

Possible copie de [Scanner saute nextLine() après avoir utilisé next(), nextInt() ou autre nextFoo()?] (Https://stackoverflow.com/questions/13102045/scanner-is-skipping-nextline-after-using-next-nextint-or-other-nextfoo) –

+1

utilisez-vous un étui sans interrupteur? Si vous vérifiez d'abord les erreurs de compilation en premier ... –

Répondre

0

Il On dirait que vous essayez d'utiliser static autant que possible pour la pratique de ce qu'il fait? Quoi qu'il en soit, voir ci-dessous pour un exemple minimal sur lequel vous pouvez construire (c'est-à-dire que vous pourrez entrer 'C' autant de fois que vous voulez 'ajouter' de nouveaux familiers). Ce n'est pas du tout parfait, il suffit de le mettre ensemble très rapidement pour vous donner une chance de travailler dessus.

+0

Note: J'ai 'age' comme une chaîne dans la classe' Pet' mais c'est facilement changé. – notyou