不使用 switch 实现 Setter 和 Getter 的方法

3
一个宠物可以是猫或狗。每个宠物都需要有一个名字、主人的名字、颜色、医生的名字和品种。所有的宠物都会哭、吃和睡觉。 在不使用switch方法的情况下,我尝试使用setter和getter函数与扫描仪一起使用。但我不知道如何确定用户输入的是狗还是猫,然后再输入有关狗或猫的所有信息。 这种情况是否可能?
package petexercise;

import java.util.Scanner;

public class PetCatDog {
  public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    PetCat cat = new PetCat();
    PetDog dog = new PetDog();
    System.out.print("Enter Dog or Cat Word:");
    String pet = cat.nextLine();
  }
}

其他子类是用于设置器和获取器的。


3
请展示一些代码! - AllTooSir
欢迎来到SO。请发布您已经编写的代码,否则很难给您提供有用的提示。 - reto
1
为什么在这种情况下你不想使用switch? - Ashish Aggarwal
请注意,您可以编辑您的问题,考虑将代码添加到您的问题中。注释是临时的,重要信息不应包含在其中。 - Richard Tingle
只是尝试创建一个新的逻辑,我指的是关于setter和getter的新逻辑。 - Serniel Barbosa
显示剩余2条评论
4个回答

4

我认为如果你不想使用switch语句,可以使用map。第一步是用简单的字符串标识用户输入的内容,第二步是创建你的宠物。

Map<String, PetFactory> factories = new HashMap<>();
factories.put("dog", new DogFactory())
...
String petType = scanner.nextLine();
factories.get(petType).createPet("name", "color");

2

所以你有 -

用户 - 代表一个用户的类。具有名称、宠物信息等。用户可以拥有多个或零个宠物

宠物 - 代表某种动物的宠物。具有一些共同的属性,如名称、年龄...一些常见的行为,如进食。

狗 - 扩展了宠物,具有一些属性,如名称、年龄、颜色、品种,以及一些特别针对狗的行为,如吠叫、接球。

猫 - 扩展了宠物,具有一些属性,如名称、年龄、颜色、品种,以及一些像每天睡二十次这样的无用行为。

向用户询问-

  1. 用户信息(创建用户)
  2. 询问用户是否有宠物。如果没有宠物,则更新用户配置文件以表示没有宠物。
  3. 如果有宠物,请询问是否有狗。如果他们有,请问有多少只。阅读每只狗的信息。构建用户的狗资料。如果没有狗,请更新用户配置文件以表示没有狗。
  4. 如果有宠物,请询问是否有猫。如果他们有,请问有多少只。阅读每只猫的信息。像步骤3中为狗所做的那样,构建用户的猫资料。

更新:

为了知道用户输入了狗还是猫,您可以使用类似于-

Scanner scan = new Scanner(System.in);

String response;

do{    
    System.out.print("Do you have a pet ? (Y/N): ");
    response = scan.nextLine();    
} while(!response.equalsIgnoreCase("Y") && !response.equalsIgnoreCase("N"));

if(response.equalsIgnoreCase("N")){
    System.exit(0);
}

do{    
    System.out.print("Cat or a dog ? (C/D): ");
    response = scan.nextLine();    
} while(!response.equalsIgnoreCase("C") && !response.equalsIgnoreCase("D")); 

我使用了if else if语句,而不是使用do while。 - Serniel Barbosa
@SernielBarbosa 如果您不使用循环,如果用户输入cst而不是cat,则不会给予第二次机会。 :) - Sajal Dutta
我用了else来实现。所以可能会返回警告。 - Serniel Barbosa

1
提到的属性不是针对特定的动物,因此可以拥有一个名为Pet的类,并具有名称、颜色、品种和动物类型等属性:
enum Animal {
    CAT(4),
    DOG(4);

    public final int legs;

    private Animal(int legs) {
        this.legs = legs;
    }
}

public static Animal what(String whatAnimal) {
    return Animal.valueOf(whatAnimal.toUpperCase());
};

Animal animal = what("dog");

2
虽然我喜欢枚举,但我认为它们在这里是一个不好的选择:枚举本质上是单例,而可能有很多狗实例。 - Gyro Gearless

1

我明白了!感谢大家的帮助。

包 dogandcat;

导入 java.util.Scanner;

public class CatDogSystem {

public static void main(String[] args) {

    String animal;

    Scanner scan = new Scanner(System.in);
    Cat cat = new Cat();
    Dog dog = new Dog();

    System.out.print("Enter Dog or Cat Only: ");
    animal = scan.nextLine();

    if(animal.equalsIgnoreCase("Cat")) {
        System.out.print("Enter cat's name: ");
        cat.setCatName(scan.nextLine());
        System.out.print("Enter owner's name: ");
        cat.setCatOwnersName(scan.nextLine());
        System.out.print("Enter cat's color: ");
        cat.setCatColor(scan.nextLine());
        System.out.print("Enter doctor's name: ");
        cat.setCatDoctorsName(scan.nextLine());
        System.out.print("Enter cat's breed: ");
        cat.setCatBreed(scan.nextLine());

        System.out.println("");
        System.out.println("Cat's Details");
        System.out.println(cat.getCatName());
        System.out.println(cat.getCatOwnersName());
        System.out.println(cat.getCatColor());
        System.out.println(cat.getCatDoctorsName());
        System.out.println(cat.getCatBreed());


    } else if(animal.equalsIgnoreCase("Dog")) {
        System.out.print("Enter Dog's name: ");
        dog.setDogName(scan.nextLine());
        System.out.print("Enter owner's name: ");
        dog.setDogOwnersName(scan.nextLine());
        System.out.print("Enter Dog's color: ");
        dog.setDogColor(scan.nextLine());
        System.out.print("Enter doctor's name: ");
        dog.setDogDoctorsName(scan.nextLine());
        System.out.print("Enter Dog's breed: ");
        dog.setDogBreed(scan.nextLine());

        System.out.println("");
        System.out.println("Dog's Details");
        System.out.println(dog.getDogName());
        System.out.println(dog.getDogOwnersName());
        System.out.println(dog.getDogColor());
        System.out.println(dog.getDogDoctorsName());
        System.out.println(dog.getDogBreed());
    } else System.out.println("Invalid Input !");
}

}


我的唯一问题是每只宠物都会哭、吃和睡觉。如果宠物哭了,就打印“呼呼”,如果宠物吃了,就打印“宠物食品”,如果宠物睡觉了,就打印“嗡嗡声”... - Serniel Barbosa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接