problem z ArrayList

0

Zaczynam pisać projekt i bardzo proszę o pomoc. piszę program do zarządzania schroniskiem dla zwierząt i ogolnie wstępnie na razie piszę funkcjonalność: określona liczba miejsc w schronisku, i metoda dodająca zwierzę do schroniska oraz uniemożliwienie dodania zwierzęcia, gdy schronisko jest p[ełne. Niestety program nie działa i nie mam już pomysłu na poprawę tego. Domyślam się, że problem tkwi przede wszytskim w tym if: if(this.count + this.animals.size() < this.animals.size()){
ale nie wiem jak inaczej napisać warunek, że rozmiar listy + count (ilosc dodanych zwierzat) ma byc mniejsze od rozmiaru listy.
Chcę by w schronisku było miejsce na 50 zwierząt.

import java.util.*;
public class Animals {
   ArrayList<String> animals = new ArrayList<String>();
   ArrayList<Integer> animalsFinish = new ArrayList<Integer>(50);
   static int count;
   public Animals(){
       this.animals = new ArrayList();
       animals.add("dog");
       animals.add("cat");
       animals.add("chamster");
       this.count = 0;
   }
   
   public boolean addAnimals(String pet){
        if(this.count + this.animals.size() < this.animalsFinish.size()){
            animals.add(pet);
            count++;
            System.out.println(animals);
            return true;
        }    
        else{
            System.out.println("Your animal list is full");
            return false;
        }
    }
    public static void main(String[] args){
        Animals animals = new Animals();
        Scanner s = new Scanner(System.in);
        System.out.print("Enter the pet to add: ");
        String pet = s.nextLine();
        System.out.println(animals.addAnimals("cat"));

    }
}
0

count nie powinno być statyczne.
Chomik to hamster, nie chamster.
animalsFinish niepotrzebnie marnuje miejsce - nie jest nigdzie używane.

Jako że ArrayList ma dynamicznie rosnący rozmiar proponowałbym inne rozwiązanie - zamiast animalsFinish zrobić stałą typu int i jej wartość byłaby rozmiarem całego schroniska. Wtedy zamiast czegoś takiego:

public boolean addAnimals(String pet){
    if(this.count + this.animals.size() < this.animalsFinish.size()){

wystarczy Ci:

public boolean addAnimals(String pet) {
    if (this.count < SIZE) {

Czytelniejsze i prostsze.

Zauważ też że dodajesz w konstruktorze 3 zwierzęta ale count nie jest zwiększane - powinieneś używać swojej metody addAnimals().

I na sam koniec:

ArrayList<String> animals = new ArrayList<String>(); // W konstruktorze znowu inicjalizujesz co nie ma sensu, inicjalizacja powinna być albo tu albo tam.

public Test() {
    this.animals = new ArrayList(); // Tu przydałoby się wstawić <> przed ()
0

dziękuję bardzo za pomoc, poprawiłam zgodnie z podpowiedziami i działa program częściowo = tzn dodaje do listy, jednak nie osbługuje ograniczenia, że gdy schronisko pełne to uniemożliwia dodanie do listy, . jak to poprawić?

import java.util.*;
public class Animals {
   ArrayList<String> animals = new ArrayList<String>();
   public static final int SIZE = 10;
   int count = 0;
   
   public boolean addAnimals(String pet){
        if(this.count < SIZE){
            animals.add(pet);
            count++;
            System.out.println(animals);
            return true;
        }   
        else{
            System.out.println("Your animal list is full");
            return false;
        }
    }
   
    public static void main(String[] args){
        Animals animals = new Animals();
        animals.addAnimals("dog");
        animals.addAnimals("cat");
        animals.addAnimals("hamster");
        animals.addAnimals("bird");
        Scanner s = new Scanner(System.in);
        System.out.print("Enter the COUNT of pet to add: ");
        int n = s.nextInt();
            for(int i = 0; i < n; i++){
            System.out.print("Enter the pet to add: ");
            String pet = s.nextLine();
        }
        System.out.println(animals.addAnimals("cat"));

    }
}
1

Może wpisać dodawanie zwierzaka do środka iteracji? Bo na razie jest na zewnątrz pętli i metoda wykonuje się raz...

0

dopisałam metodę usuwająca, niby analogicznie a coś nie działa..., bo po zakończeniu dodawania program się wyłącza

public class Animals {
   ArrayList<String> animals = new ArrayList<String>();
   public static final int SIZE = 10;
   int count = 0;
   
   public boolean addAnimals(String pet){
        if(this.count < SIZE){
            animals.add(pet);
            count++;
            System.out.println(animals);
            return true;
        }   
        else{
            System.out.println("Your animal list is full");
            return false;
        }
    }
      public boolean removeAnimals(String pet){
        if(this.count < SIZE){
            animals.remove(pet);
            count--;
            System.out.println(animals);
            return true;
        }   
        else{
            System.out.println("Your animal list is empty");
            return false;
        }
    }
    public static void main(String[] args){
        Animals animals = new Animals();
        animals.addAnimals("dog");
        animals.addAnimals("cat");
        animals.addAnimals("hamster");
        animals.addAnimals("bird");
        Scanner s = new Scanner(System.in);
        System.out.print("Enter the COUNT of pet to add: ");
        int n = s.nextInt();
            for(int i = 0; i < n; i++){
            System.out.print("Enter the pet to add: ");
            String pet = s.nextLine();
            System.out.print(animals.addAnimals("cat")); 
        }
        System.out.print("Enter the COUNT of pet to remove: ");
        n = s.nextInt();
            for(int i = 0; i < n; i++){
            System.out.print("Enter the pet to remove: ");
            String pet = s.nextLine();
            System.out.print(animals.removeAnimals("dog"));
        }
            
       System.out.println();
    }
}
1

Można też skrócić:

// z:
ArrayList<String> animals = new ArrayList<String>();
// do:
List<String> animals = new ArrayList<>();
0

To chyba nie tak ma działać?
screenshot-20180402232808.png

Masz błąd.. dodajesz i usuwasz literały zamiast obiekty przypisane do referencji pet:

for (int i = 0; i < n; i++) {
            System.out.print("Enter the pet to add: ");
            String pet = s.nextLine();
            System.out.print(animals.addAnimals(pet)); // miałaś System.out.print(animals.addAnimals("cat")); 
        }
        System.out.print("Enter the COUNT of pet to remove: ");
        n = s.nextInt();
        for (int i = 0; i < n; i++) {
            System.out.print("Enter the pet to remove: ");
            String pet = s.nextLine();
            System.out.print(animals.removeAnimals(pet)); // znowu System.out.print(animals.addAnimals("dog")); 
        }
0

dziękuję bardzo za pomoc. Poprawiłam, ale wydaje mi sie,metoda remove dalej nie działa, jak poiwinna, jakies podpowiedzi dlacxego?

import java.util.*;
public class Animals {
   ArrayList<String> animals = new ArrayList<String>();
   public static final int SIZE = 10;
   int count = 0;
   
   public boolean addAnimals(String pet){
        if(this.count < SIZE){
            animals.add(pet);
            count++;
            System.out.println(animals);
            return true;
        }   
        else{
            System.out.println("Your animal list is full");
            return false;
        }
    }
      public boolean removeAnimals(String pet){
        if(this.count  > 0){
            animals.remove(pet);
            count--;
            System.out.println(animals);
            return true;
        }   
        else{
            System.out.println("Your animal list is empty");
            return false;

       }
    }
    public static void main(String[] args){
        Animals animals = new Animals();
        animals.addAnimals("dog");
        animals.addAnimals("cat");
        animals.addAnimals("hamster");
        animals.addAnimals("bird");
        Scanner s = new Scanner(System.in);
        System.out.print("Enter the COUNT of pet to add: ");
        int n = s.nextInt();
            for(int i = 0; i < n; i++){
            System.out.print("Enter the pet to add: ");
            String pet = s.nextLine();
            System.out.print(animals.addAnimals(pet)); 
        }
        System.out.print("Enter the COUNT of pet to remove: ");
        n = s.nextInt();
            for(int i = 0; i < n; i++){
            System.out.print("Enter the pet to remove: ");
            String pet = s.nextLine();
            System.out.print(animals.removeAnimals(pet));
        }
            
       System.out.println();
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1