Java 使物体更容易清洁

Java 使物体更容易清洁,java,object,if-statement,Java,Object,If Statement,每次我想做一个新的狗,我必须添加更多的if语句,这将使代码更不可读。我将如何使这个代码更干净,将来我将如何在不添加更多if的情况下使更多的狗更容易 public class Animals { String userName; Scanner scanner = new Scanner(System.in); Dog oscar = new Dog("Oscar", "German Shepherd", "No one", 2); Dog sheeba = new

每次我想做一个新的狗,我必须添加更多的if语句,这将使代码更不可读。我将如何使这个代码更干净,将来我将如何在不添加更多if的情况下使更多的狗更容易

public class Animals {
    String userName;
    Scanner scanner = new Scanner(System.in);
    Dog oscar = new Dog("Oscar", "German Shepherd", "No one", 2);
    Dog sheeba = new Dog("Sheeba", "BullDog", "No one", 4);

    public void Username() {
        System.out.println("Your Name?");
        userName = scanner.nextLine();
        System.out.println("Hello " + userName);
    }

    public void myAnimal () {
        System.out.println("Please Choose a Dog | Oscar | Sheeba ");
        String chooseDog = scanner.nextLine();
        if (chooseDog.equals("Oscar")) {
            oscar.info();
            System.out.println("Adopt Oscar? | Yes | No");

            String adoptOscar = scanner.nextLine();
            if (adoptOscar.equals("Yes")) {
                oscar.owner = userName;

                System.out.println("Change Oscar's name? | Yes | No");
                String changeOscar = scanner.nextLine();
                if (changeOscar.equals("Yes")) {
                    System.out.println("New Name");
                    String newOscar = scanner.nextLine();
                    oscar.name = newOscar;
                } else if (changeOscar.equals("No")) {
                    oscar.info();
                }
                myAnimal();
            } else if (adoptOscar.equals("No")) {
                myAnimal();
            }
        } else if(chooseDog.equals("Sheeba")){
            sheeba.info();
            System.out.println("Adopt Sheeba? | Yes | No");

            String adoptSheeba = scanner.nextLine();
            if (adoptSheeba.equals("Yes")) {
                sheeba.owner = userName;
                System.out.println("Change Sheeba's name? | Yes | No");
                String changeSheeba = scanner.nextLine();
                if (changeSheeba.equals("Yes")) {
                    System.out.println("New Name");
                    String newSheeba = scanner.nextLine();
                    sheeba.name = newSheeba;
                } else if (changeSheeba.equals("No")) {
                    sheeba.info();
                }
                myAnimal();
            } else if (adoptSheeba.equals("No")) {
                myAnimal();
            }
        }
    }
}    

您可以创建另一个类:

class Dogs{
  private List<Dog> dogs;

  public Dogs(List<Dog> dogs){
    this.dogs = dogs;
  }
  //getter, setter
}
提示:您可以将类动物模块化,以仅存储元素用户名,并创建另一个类来制作其他内容


提示:创建另一个名为user的类,并接收该家伙的用户名和动物列表

通常,您希望考虑哪些是常见的,这样就不会在代码中重复自己。这里的过程对每只狗都是一样的,所以你真正想要的是一种以同样的方式处理所有狗的方法

您可以做什么:

  • 在你的班级中创建一个
    狗的列表,并将你的狗添加到其中
    
  • 当您要求用户选择一个时,只需读取列表中的名称即可打印出来
  • 当用户选择狗名时,从您的列表中找到该狗并处理该狗
  • 如果用户更改了狗的名称,则dof将在列表中更新,下次打印列表时,它将具有新名称
理想情况下,你有一个单独的方法来处理任何狗。在下面的示例中,我称之为
dealWithDog

(我避免使用Stream和Optional来保持代码循环的直观性)


您可以先正确缩进代码,这样更易于阅读;)您可以模块化内容并接收输入参数;)您可以为每个重复任务编写一个小函数,例如
getUserInput
makeNew
rename
。这是程序编程。要实现OOP,您需要创建
类Dog
,并将所有这些方法附加到类中。然后,您可以使用自己的
makeNew
rename
函数创建,比如
class Cat
,但是您可以毫无问题地重用
getUserInput
。如果OP提供了代码用途的描述,这个问题可能更适合@dnault,所以你们很多人建议我应该多上一些课。我很害怕这样做,因为我在reddit上和一个家伙聊天时,有点责骂我上了不必要的课。在用户名和我的动物分开之前,但在那家伙说了什么之后,我把它们合并在一起了。这是一个好主意,因为当时我不知道如何将狗的主人设置为用户输入的名称。但我刚刚意识到我可以创建一个包含所有方法的类。那会节省我的时间。你计划的各个方面!哇!非常感谢。你真的只是做了我的家庭作业。我真的不熟悉接球手和二传手,因为他们都是关于ints的。但是谢谢你,伙计。我真的很感激。确保你了解一切。另外,在
Animal
类中没有
username()
方法也很好,因为它不相关。最好将用户名作为参数传递给
myAnimal()
方法(即
myAnimal(字符串用户名)
)。还有很多改进可以做。好的。但还有一件事。我添加了另一种方法,如果您愿意,您可以再次选择。如果你同意用“再次选择”的方法把狗的名字改成“烧烤”,它会打印出新名字而不是旧名字。哇!是的,我想我什么都懂。大部分都是依靠二传手和三传手,而我没有这样做,多亏了你,我对arraylist有了更多的了解。
for (Dogs dog:animals.getDogs()){
   if(readerDog.equals(dog.getName())){
      //do wathever you want here.
    }
}
public class Animals {
    private String userName;
    private Scanner scanner = new Scanner(System.in);

    // This list will hold all your dogs
    private List<Dog> dogs;

    public Animals() {
        // Add the dogs to the list on the class constructor
        dogs = new ArrayList<>();
        dogs.add(new Dog("Oscar", "German Shepherd", "No one", 2));
        dogs.add(new Dog("Sheeba", "BullDog", "No one", 4));
    }

    public void myAnimal () {
        // Display dog names (this could be in a separate method)
        System.out.println("Please Choose a Dog:");
        for(Dog dog : dogs) {
            System.out.println(dog.getName());
        }

        // Find the chosen dog (this could be in a separate method)
        String chooseDog = scanner.nextLine();
        for(Dog dog : dogs) {
            if(dog.getName().equals(chooseDog)) {
                // Deal with the chosen dog
                dealWithDog(dog);
            }
        }

        // Do it all over again
        myAnimal();
    }

    private void dealWithDog(Dog dog) {
        System.out.println(dog.getInfo());
        System.out.println("Adopt "+dog.getName()+"? | Yes | No");

        String adoptDog = scanner.nextLine();
        if (adoptDog.equals("Yes")) {
            dog.setOwner(userName);

            System.out.println("Change "+dog.getName()+"'s name? | Yes | No");
            String changeName = scanner.nextLine();
            if (changeName.equals("Yes")) {
                System.out.println("New Name");
                String newName = scanner.nextLine();
                dog.setName(newName);
            } else if (changeName.equals("No")) {
                System.out.println(dog.getInfo());
            }
        }
    }

    public void username() {
        System.out.println("Your Name?");
        userName = scanner.nextLine();
        System.out.println("Hello " + userName);
    }
}
class Dog {
    private String info;
    private String name;
    private String owner;
    private int age;

    public Dog(String name, String info, String owner, int age) {
        this.info = info;
        this.name = name;
        this.owner = owner;
        this.age = age;
    }

    // GETTERS/ SETTERS
}