gpt4 book ai didi

java - 从 Arraylist 中删除对象如果它等于用户输入,否则只打印一次

转载 作者:行者123 更新时间:2023-11-30 06:46:20 27 4
gpt4 key购买 nike

我现在已经尝试了大多数事情,但似乎都没有用。如果用户输入特定名称,我想从 Arraylist 中删除特定对象。如果不是,我希望程序打印“找不到狗”。我在我的其他类中有一个 getName 和 toString 方法,它们与我在这个程序中的所有其他选项一起工作良好,这是唯一不起作用的方法。

情况 4 是应该进行删除的地方。但我也想让你看看案例 3,比较案例 3 无论如何打印出“找不到狗”,而案例 4 打印出“找不到狗”的次数与有对象的次数一样多。

这里是主要方法:

ArrayList<Dog> doglist = new ArrayList<Dog>();
Scanner myscan = new Scanner(System.in);
boolean running = true;

while (running) {
System.out.println("\n************************************");
System.out.println("\nVälkommen till Kennelklubben!");
System.out.println("\n************************************");
System.out.println("\n[1] Register new dog");
System.out.println("[2] Print out list");
System.out.println("[3] Increase age");
System.out.println("[4] Remove dog");
System.out.println("[5] Quit program");
System.out.println("\n************************************");
System.out.println("\nChoose: ");

int option = myscan.nextInt();

switch (option) {
case 1:
System.out.println("Write name:");
String name = myscan.next();
System.out.println("Write race:");
String race = myscan.next();
System.out.println("Age:");
int age = myscan.nextInt();
System.out.println("Weight:");
double weight = myscan.nextDouble();

Dog dog = new Dog(name, race, age, weight);

doglist.add(dog);

break;
case 2:
System.out.println("Minimum length of tail:");
double userInput1 = myscan.nextDouble();

for (Dog d : doglist) {
if (d.getTailLength() >= userInput1) {
System.out.println(d.toString());
} else {
System.out.println("Can't find dog");
}
}
break;
case 3:
System.out.println("Name of dog:");
String userInput2 = myscan.next();

for (Dog d : doglist) {
if (d.getName().equals(userInput2)) {
d.increaseAge();
break;
}
}
System.out.println("Can't find dog");
break;
case 4:
System.out.println("Name of dog:");
String userInput3 = myscan.next();
for (Dog d : doglist) {
if (d.getName().equals(userInput3)) {
doglist.remove(d.toString());
} else {
System.out.println("Can't find dog");
}
}
break;
case 5:
running = false;//Avslutar loopen och därmed programmet
System.out.println("Programmet avslutat");
break;
default:
System.out.println("Nu blev det fel, välj mellan [1] [2] [3] [4] [5]");//Felmeddelande om valet är någon annan siffra än de som menyn innehåller
break;
}
}

这是我的方法的另一个类

public class Dog
{
private String name;
private String race;
private int age;
private double weight;
private double tailLength;

public Dog (String name, String race, int age, double weight)
{
this.name = name;
this.setRace(race);
this.age = age;
this.weight = weight;

if(race.equals("tax"))
{
this.setTailLength(3.7);
}
else
{
this.setTailLength((age - weight) / 10);
}
}


public String getRace()
{
return race;
}

public void setRace(String race)
{
this.race = race;
}

public double getTailLength()
{
return tailLength;
}

public void setTailLength(double tailLength)
{
this.tailLength = tailLength;
}

public int increaseAge()
{
age++;
return age;
}

public String toString()
{
return name + " " + getRace() +
" " + age + " " + "år" + " " + weight + " " + "kg" + " " + getTailLength();
}

public String getName()
{
return name;
}
}

最佳答案

为清楚起见,这是您当前拥有的内容:

            System.out.println("Name of dog:");
String userInput3 = myscan.next();

for(Dog d : doglist)
{
if(d.getName().equals(userInput3))
{
doglist.remove(d.toString());
}
else
{
System.out.println("Can't find dog");
}
}

break;

dogListArrayList<Dog> .

ArrayList.remove()documentation states :

Removes the first occurrence of the specified element from this list, if it is present. If the list does not contain the element, it is unchanged.

在这里,您正在调用 remove()使用参数 d.toString() . d是您要删除的 Dog 实例。 d.toString()返回 String .

所以 dogList.remove(d.toString())将尝试删除 String从列表中。显然这个String不在列表中,因为它是 Dog 的列表.这String不会被发现,也不会删除任何内容。

如文档所述,您需要传递要删除的实例。您需要调用 doglist.remove(d) .但是,这会导致错误,因为您无法在迭代列表时从列表中删除项目。

因此,您需要存储 Dog临时变量中的实例,并在对其进行迭代后将其删除。

像这样的东西会起作用:

Dog dogToRemove = null;
for (Dog d: dogList) {
if (d.getName().equals(userInput3)) {
dogToRemove = d;
}
}

if (dogToRemove == null) {
System.out.println("Could not find dog with name " + userInput3);
} else {
dogList.remove(dogToRemove);
}

请注意,还有其他方法可以做到这一点,这只是其中一种。我鼓励您找到替代方案,以便您了解它如何更好地工作。

关于java - 从 Arraylist 中删除对象如果它等于用户输入,否则只打印一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47757102/

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