Java 使物体更容易清洁
每次我想做一个新的狗,我必须添加更多的if语句,这将使代码更不可读。我将如何使这个代码更干净,将来我将如何在不添加更多if的情况下使更多的狗更容易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
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
}