【问题标题】:Method being called twice for some strange reason?由于某种奇怪的原因,方法被调用了两次?
【发布时间】:2018-03-20 16:42:03
【问题描述】:

由于某种原因,在我添加了一个名为“Oliver”的宠物后,主菜单会打印两次,并带有“无效选择”行。我只需要另一双眼睛来看看它,因为我已经看了好几个小时了,一直在修正一些小错误,但无济于事。

运行时的代码如下:

     /*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";
}

}

【问题讨论】:

  • 请阅读 java 命名约定。几乎感觉就像你在故意违反它们。 Serioulsy:正是你编写代码的方式让我转身去做其他事情......
  • 您使用的是没有开关的案例吗?您是否应该先仔细检查任何编译错误...
  • 我认为代码无法编译:缺少开关、缺少 } 等...

标签: java class loops methods constructor


【解决方案1】:

您似乎正在尝试尽可能多地使用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();
    }

这绝不是完美的,只是很快将它们拼凑在一起,让你有机会继续努力。

【讨论】:

  • 注意:我在Pet 类中有age 作为字符串,但这很容易改变。
猜你喜欢
  • 2011-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-22
  • 2022-01-20
  • 1970-01-01
  • 2021-07-23
  • 1970-01-01
相关资源
最近更新 更多