Question

I must create list of pets that includes cats and dogs and I must use inheritance for this. Pet class wil include name variable, Dog class will include name and weight variables and Cat class will include name and coatColor variables.

And I must create a Test class which includes that menu below.

Add dog Add cat Remove dog Remove cat List dogs List cats List all pets Show min, max and average weight of dogs Quit

My classes are below. I think my Pet, Cat and Dog classes working well but There is some problems in my PetTest Class and i couldn't find out what it is. If you can help me I would be happy.

Pet Class:

public class Pet
{
    private static String name;



    public String getName()
    {
        return name;
    }

    protected void setName(String newName)
    {
        name = newName;
    }

    public Pet(String petName) {
        name = petName;
    }



}

Dog Class:

public class Dog extends Pet
{

    private Double weight;

    public double getWeight()
    {
        return weight;
    }

    protected void setWeight(double newWeight)
    {
        weight = newWeight;
    }


    public Dog(String petName, double dogWeight)
    {
        super(petName);
        weight = dogWeight;

    }
}

Cat Class:

public class Cat extends Pet
{

    private String coatColor;

    protected String getColor()
    {
        return coatColor;
    }

    protected void setColor(String newColor)
    {
        coatColor = newColor;
    }

    public Cat(String petName, String coatColor)
    {
        super(petName);
        this.coatColor = coatColor;
    }
}

PetTest Class:

import java.util.*;

public class PetTest
{
    //i made it static to make all method to be able to see it.
    static ArrayList<Pet> mainList = new ArrayList<Pet>();
    static Iterator<Pet> mainIter = mainList.iterator();
    static Scanner keyboard = new Scanner(System.in);

    static Pet cat2342 = new Cat("mirnav", "beyaz");
    public static void listDogs()
    {
            for(Pet pet: mainList)
            {
                if (pet instanceof Dog)
                {
                    System.out.println(pet);
                }
            }//end of for loop
    }//end of listDogs method

    public static void listCats()
    {
            for(Pet pet: mainList)
            {
                if(pet instanceof Cat)
                {
                    System.out.println(pet);
                }
            }//end of for loop

    }//end of listCats method

    public static void addDog(String dogName,Double dogWeight)
    {
        Pet dog = new Dog(dogName, dogWeight);
        mainList.add(dog);
    }//end of addDog method

    public static void addCat(String catName, String furColor)
    {
        Pet cat = new Cat(catName, furColor);
        mainList.add(cat);
    }//end of addCat method

    public static void removeDog(String dogName)
    {
        for(Pet pet : mainList)
            {
                if(pet.getName().equals(dogName))
                {
                    mainIter.remove();
                }//end of if statement
            }//end of for loop

    }//end of removeDog method


    public static void removeCat(String catName)
    {
        while (mainIter.hasNext())
        {
            for(Pet pet : mainList)
            {
                if(pet.getName().equals(catName))
                {
                    mainIter.remove();
                }//end of if statement
            }//end of for loop


        }//end of while loop

    }//end of removeCat method

    public static void showMenu()
    {
        System.out.println("1. Add dog ");
        System.out.println("2. Add cat");
        System.out.println("3. Remove dog");
        System.out.println("4. Remove cat");
        System.out.println("5. List dogs");
        System.out.println("6. List cats");
        System.out.println("7. List all pets");
        System.out.println("8. Show min, max and average weight of dogs");
        System.out.println("0. Quit");
        int action = keyboard.nextInt();

        Scanner parameter1 = new Scanner(System.in);
        Scanner parameter2 = new Scanner(System.in);

        while(action != 0)
        {
        switch(action)
        {
        case 1: 
            System.out.println("Type in the name of the dog that you want to add.");
            String dogName = parameter1.next();
            System.out.println("Type in the weight of the dog that you want to add.");
            Double dogWeight = parameter2.nextDouble();
            addDog(dogName,dogWeight);
            showMenu();


        case 2:
            System.out.println("Type in the name of the cat that you want to add.");
            String catName = parameter1.next();
            System.out.println("Type in the color of the cat that you want to add.");
            String furColor = parameter2.next();
            addCat(catName,furColor);
            showMenu();


        case 3:
            System.out.println("Type in the name of dog that you want to remove.");
            String dogToRemove = parameter1.next();
            removeDog(dogToRemove);
            showMenu();


        case 4:
            System.out.println("Type in the name of dog that you want to remove.");
            String catToRemove = parameter1.next();
            removeDog(catToRemove);
            showMenu();


        case 5:
            listDogs();
            showMenu();
        case 6:
            listCats();
            showMenu();
            break;


        }//end of switch statement

        }//end of while loop
    }//end of showMenu method

    public static void main(String[] args)
    {

        showMenu();



        }//end of main method



}//end of the class
Was it helpful?

Solution

Thin the problem you are speaking about is that you can't remove dogs/pets: it's caused by a java.lang.IllegalStateException You'd want to remove a pet from the iterator (row 52), but you have never called next() method - iterator's index is placed at -1. You should call next() every foreach loop, OR add a counter and remove the row directly from the ArrayList.

BUT you must post to codereview, and please, try to be more exhaustive. "there are some problems" isn't good enough, you should give me some more infos. Maybe you encountered other problems.

Hopes this helps.

Bye

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top