【发布时间】:2018-05-25 05:20:28
【问题描述】:
我现在一直在尝试大多数事情,但它似乎不起作用。如果用户输入特定名称,我想从 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;
}
}
【问题讨论】:
-
您即将遇到一个名为
ConcurrentModificationException的令人讨厌的异常。当您遍历列表并尝试同时从列表中删除项目时会发生这种情况 -
在情况 4 中不能按名称删除
-
该列表中是否可以有多只同名的狗?
-
@smac89 好的,我明白了,但是如果我想按名称删除对象,我该怎么做?
-
@smac89 这是可能的,但我们可以假设现在还不行,如果这会让事情变得更容易?
标签: java for-loop arraylist remove-if