Я пытаюсь найти собаку в ArrayList и затем либо удалить ее, либо увеличить ее возраст в зависимости от того, какой метод вызывается.
Сейчас я могу только удалить / увеличить возраст первой собаки в ArrayList. Когда я ищу Турбо или Каспера, они не появляются. Я предполагаю, что по какой-то причине они не попадают в петлю.
Основной класс:
public class main {
public static void main(String[] args) {
DogShell dogShell = new DogShell();
Dog fidoDog = new Dog("Fido", "schäfer", 7, 27);
Dog turboDog = new Dog("Turbo", "bulldog", 12, 33);
Dog kasperDog = new Dog("Kasper", "sheepdog", 5, 4);
dogShell.dogArrayList.add(fidoDog);
dogShell.dogArrayList.add(turboDog);
dogShell.dogArrayList.add(kasperDog);
dogShell.initialize();
dogShell.runCommandLoop();
dogShell.shutDown();
}
}
Класс собаки:
public class Dog {
// Fields
private String name, breed;
private int age;
private int weight;
// Constructor
public Dog(String name, String breed, int age, int weight) {
this.name = name;
this.age = age;
this.breed = breed;
this.weight = weight;
}
// Methods
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getBreed() {
return breed;
}
public int getWeight() {
return weight;
}
public double getTailLength() {
double taxTailLength = 3.7;
double tailLength = ((double) age * (double) weight) / 10;
if (breed.equalsIgnoreCase("tax") || breed.equalsIgnoreCase("dachshund")) {
return taxTailLength;
} else {
return tailLength;
}
}
public String toString() {
String result = "";
result ="\nName: " + name + "\nBreed: " + breed + "\nAge: " + age + " years" + "\nWeight: " + weight + " kg" + "\nTail length: " + getTailLength() + "\n";
return result;
}
// Increases age by one year.
public int increaseAge() {
return this.age++;
}
}
Класс DogShell:
import java.util.*;
public class DogShell {
ArrayList<Dog> dogArrayList = new ArrayList<Dog>();
Iterator<Dog> iterator = dogArrayList.iterator();
Scanner scanner = new Scanner(System.in);
public DogShell() {
}
public void initialize() {
System.out.println("Welcome to the dog register!");
}
public void runCommandLoop() {
Scanner scanner = new Scanner(System.in);
String input;
do {
System.out.print("Command> ");
input = scanner.nextLine();
switch (input) {
case "exit":
break;
case "remove dog":
removeDogs();
break;
case "list dogs":
listDogs();
break;
case "increase age":
increaseAge();
break;
case "register new dog":
registerDog();
break;
default:
System.out.println("Error: unknown command " + "\"" + input + "\"");
break;
}
} while (!input.equalsIgnoreCase("exit"));
}
public void shutDown() {
System.out.println("Goodbye!");
}
public void registerDog() {
Scanner scanner = new Scanner(System.in);
System.out.println("You gave the command \"register new dog\"");
System.out.println("Name: ");
String dName = scanner.nextLine();
System.out.println("Breed: ");
String dBreed = scanner.nextLine();
System.out.println("Age: ");
int dAge = scanner.nextInt();
System.out.println("Weight: ");
int dWeight = scanner.nextInt();
dogArrayList.add(new Dog(dName, dBreed, dAge, dWeight));
}
public void listDogs() {
System.out.println("You gave the command \"list dogs\"");
System.out.println(Arrays.toString(dogArrayList.toArray()));
}
public void increaseAge() {
System.out.println("Enter the name of the dog you want to age: ");
String name = scanner.nextLine();
for (int i = 0; i < dogArrayList.size(); i++) {
String dogName = dogArrayList.get(i).getName();
if (name.equalsIgnoreCase(dogArrayList.get(i).getName())) {
dogArrayList.get(i).increaseAge();
System.out.println(dogArrayList.get(i).getName() + " is now " + dogArrayList.get(i).getAge() + " years old");
break;
} else {
System.out.println("Error: no dog called " + name);
break;
}
}
}
public void removeDogs() {
String name;
System.out.println("What is the name of the dog you want to delete");
name = scanner.nextLine();
for (int i = 0; i < dogArrayList.size(); i++) {
String dogName = dogArrayList.get(i).getName();
if (name.equalsIgnoreCase(dogArrayList.get(i).getName())) {
dogArrayList.remove(dogArrayList.get(i));
System.out.println(name + " has been deleted.");
break;
} else {
System.out.println("Error: no dog with " + name + " name.");
break;
}
}
}
}
Вывод при выполнении и тестировании
Welcome to the dog register!
Command> list dogs
You gave the command "list dogs"
[
Name: Fido
Breed: schäfer
Age: 7 years
Weight: 27 kg
Tail length: 18.9
,
Name: Turbo
Breed: bulldog
Age: 12 years
Weight: 33 kg
Tail length: 39.6
,
Name: Kasper
Breed: sheepdog
Age: 5 years
Weight: 4 kg
Tail length: 2.0
]
Command> register new dog
You gave the command "register new dog"
Name:
stack
Breed:
overflow
Age:
13
Weight:
37
Command> list dogs
You gave the command "list dogs"
[
Name: Fido
Breed: schäfer
Age: 7 years
Weight: 27 kg
Tail length: 18.9
,
Name: Turbo
Breed: bulldog
Age: 12 years
Weight: 33 kg
Tail length: 39.6
,
Name: Kasper
Breed: sheepdog
Age: 5 years
Weight: 4 kg
Tail length: 2.0
,
Name: stack
Breed: overflow
Age: 13 years
Weight: 37 kg
Tail length: 48.1
]
Command> increase age
Enter the name of the dog you want to age:
stack
Error: no dog called stack
Command> increase age
Enter the name of the dog you want to age:
fido
Fido is now 8 years old
Command> remove dog
What is the name of the dog you want to delete
stack
Error: no dog with stack name.
Command> remove dog
What is the name of the dog you want to delete
fido
fido has been deleted.
Command> list dogs
You gave the command "list dogs"
[
Name: Turbo
Breed: bulldog
Age: 12 years
Weight: 33 kg
Tail length: 39.6
,
Name: Kasper
Breed: sheepdog
Age: 5 years
Weight: 4 kg
Tail length: 2.0
,
Name: stack
Breed: overflow
Age: 13 years
Weight: 37 kg
Tail length: 48.1
]
Command> exit
Goodbye!