gpt4 book ai didi

java - 创建一个通过菜单添加和删除项目的 ArrayList

转载 作者:行者123 更新时间:2023-12-01 12:58:59 26 4
gpt4 key购买 nike

我想向 ArrayList 添加和删除元素叫mainList通过我创建的菜单和 switch PetTest 中的声明我设计的类(class)。

但是,当我添加 2 只狗或猫(例如,一只名为加菲猫,另一只名为小猫)时,我会调用 listCats方法是从我的switch中选择选项6声明中,显示两只猫同名“小猫”。你知道为什么我的代码中会发生这种情况吗?

宠物类别:

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;
}



}

狗类:

public class Dog extends Pet
{

private Double weight;

public double getWeight()
{
return weight;
}

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

public String toString() {
return String.format("%s , %f", getName(), getWeight());
}

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

}
}

猫类:

 public class Cat extends Pet
{

private String coatColor;

protected String getColor()
{
return coatColor;
}

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

public String toString() {
return String.format("%s , %s", getName(), getColor());
}


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

PetTest 类:

import java.util.*;

public class PetTest
{
static ArrayList<Pet> mainList = new ArrayList<Pet>();
static Iterator<Pet> mainIter = mainList.iterator();
static Scanner keyboard = new Scanner(System.in);


public static void listDogs()
{
for(Pet pet: mainList)
{
if (pet instanceof Dog)
{
System.out.println(pet.toString());
}
}//end of for loop
}//end of listDogs method

public static void listCats()
{
for(Pet pet: mainList)
{
if(pet instanceof Cat)
{
System.out.println(pet.toString());
}
}//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))
{
mainList.remove(pet);
}//end of if statement
}//end of for loop

}//end of removeDog method


public static void removeCat(String catName)
{//java.lang.IllegalStateException you must call next method of iterator
for(Pet pet : mainList)
{
if(pet.getName().equals(catName))
{
mainList.remove(pet);

}//end of if statement

}//end of for 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();

break;

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();

break;

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

break;

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

break;

case 5:
listDogs();
showMenu();

break;

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

最佳答案

您的名称变量在 Pet 类中定义为静态,这意味着它在所有 Pet 实例中都是相同的。删除 static 修饰符,你应该就可以了。

关于java - 创建一个通过菜单添加和删除项目的 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23662793/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com