Hej Już tłumaczę w czym leży problem. Ogólnie w Twoim kodzie zmieniłbym kilka rzeczy - poniżej wytłumaczę co i dlaczego.
Od czego rozpocznę? Widzisz, Twój result poprawnie się zapisuje, lecz każdy zapis ma miejsce w innym obiekcie - zapis new Shelter() tworzy za każdym razem nowy obiekt, odmienny od reszty. Ty powinieneś posiadać jedno schronisko, które np. stworzysz w funkcji main, i będziesz je przekazywał do konstruktorów zwierząt. Uważam jednak, że to schronisko powinno posiadać metody addAnimal() i removeAnimal(). Pozwoliłoby to uniknąć przekazywania obiektu schroniska do konstruktora i byłoby bardziej logiczne.
Niemniej, pozostanę przy Twoim pomyśle i zostawię te metody w klasie Animal. Ważne jednak, aby poprawić konstruktor tej klasy, tak aby przyjmował referencję do schroniska, w którym będzie przetrzymywane zwierze.
Ponadto, stworzenie obiektu Scanera umieściłbym poza pętlą while - aby nie tworzyć każdorazowo nowego skanera przy obrocie pętli - będzie to efektywniejsze. To samo tyczy się zwierzęcia - umieszczę jego konstruktor w instrukcji if, ponieważ jest jeden przypadek, gdzie tworzysz obiekt tego typu niepotrzebnie - w momencie wyświetlania statusu.
Metoda main:
import java.util.Scanner;
public class Main
{
public static void main(String args[]) {
Shelter shelter = new Shelter(); //jedno schronisko dla wszystkich zwierzat
@SuppressWarnings("resource") // for scanner
Scanner scanner = new Scanner(System.in); //jeden skaner, aby nie tworzyc nowych obiektow co obrot petli
System.out.println("welcome message");
while (true) {
String result = scanner.nextLine();
if(result.equalsIgnoreCase("status")) {
statusCommand();
} else if(result.equalsIgnoreCase("add")) {
Animal animal = new Animal(shelter); //Kazde zwierze jest w tym samym schronisku
animal.addAnimal();
} else if(result.equalsIgnoreCase("remove")) {
Animal animal = new Animal(shelter);
animal.removeAnimal();
}
}
}
public static void statusCommand() {
System.out.println("Aktualnie w schronisku posiadamy " + shelter.getAnimals().size() + "/" + shelter.capacity + " zwierząt.");
if(shelter.getCapacity() <= shelter.capacity) {
System.out.println("Posiadamy jeszcze wolne miejsca!");
} else {
System.out.println("Nie mamy już wolnych miejsc!");
}
}
}
Klasa Animal:
import java.util.List;
import java.util.Scanner;
public class Animal
{
String name;
Scanner scanner = new Scanner(System.in);
Shelter shelter;
List<String> animals;
public Animal(Shelter s) {
shelter = s;
animals = s.getAnimals();
}
public void addAnimal() {
System.out.println("Podaj imię swojego zwierzaka: ");
String result = scanner.nextLine();
this.name = result;
if(animals.contains(name)) {
System.out.println("Taki zwierzak juz istnieje!");
} else if(animals.size() <= shelter.capacity) {
animals.add(name);
System.out.println("Pomyslnie utworzono zwierzaka o imieniu " + result);
} else {
System.out.println("Schronisko jest już pełne!");
}
}
public void removeAnimal() {
System.out.println("Podaj imię swojego zwierzaka: ");
String result = scanner.nextLine();
name = result;
if(!animals.contains(name)) {
System.out.println("Nie posiadamy takiego zwierzaka!");
} else {
animals.remove(name);
System.out.println("Pomyslnie usunieto zwierzaka o imieniu " + result);
}
}
}
Można jeszcze poprawić kilka rzeczy, ale to tak na szybko, że odblokować Twój błąd. W razie pytań pisz.
Pozdrawiam!