我正在尝试使用构造函数中提供的验证检查来初始化Animal类的实例字段。如果我在调用构造函数时输入正确的值 - 例如tiger - 但是如果在输入不正确的值后输入相同的值则不起作用,这似乎有效。由于某种原因,它似乎没有退出while循环。我正在使用合成来测试是否正确输入了字段值。
公共类动物{ 私有字符串类型;
public Animal(String type) {
enter code here
if ((type.equals("cheetah")) || (type.equals("tiger")) || (type.equals("Snake")) || (type.equals("lion"))) {
this.type = type;
}
else {
Scanner animaltype = new Scanner(System.in);
System.out.println("This animal has either left the jungle or is not present in the jungle. Please enter another value.");
type = animaltype.next();
while ((!type.trim().equals("cheetah") || (!type.trim().equals("tiger")) || (!type.trim().equals("Snake")) || (!type.trim().equals("lion"))))
{
if (type.equals("kangaroo")) {
System.out.println("Kangaroos have left the jungle. Please enter another value");
type = animaltype.next();
}
else if ((!type.trim().equals("kangaroo")) || (!type.trim().equals("cheetah")) || (!type.trim().equals("tiger")) || (!type.trim().equals("Snake")) || (!type.trim().equals("lion"))) {
System.out.println("This animal is not present in the Jungle. Please enter another value");
type = animaltype.next();
}
}
this.type = type;
}
}
public String getType() {
return this.type;
}
}
public class main {
public static void main(String[] args) {
Scanner animaltype = new Scanner(System.in);
System.out.println("Store the type of animal that is in the jungle");
String rt = animaltype.next();
Animal animal = new Animal(rt);
Jungle jungle = new Jungle(animal);
System.out.println(jungle.getAnimal().getType());
}
}
public class Jungle {
private Animal animal;
public Jungle(Animal animal) {
this.animal = animal;
}
public Animal getAnimal() {
return animal;
}
}
答案 0 :(得分:0)
while
循环中的条件不正确。它说如果type
不等于至少一个字符串,那么继续。好吧,type
不能等于其中一个以上的字符串,因此while循环将永远持续。出现这种现象的原因是您使用or
并且需要使用and
运算符。您需要将条件替换为(!type.trim().equals("cheetah") && (!type.trim().equals("tiger")) && (!type.trim().equals("Snake")) && (!type.trim().equals("lion")))
或!(type.trim().equals("cheetah) || type.trim().equals("tiger") || type.trim().equals("Snake") || type.trim().equals("lion"))
。两者都说如果type
等于任何字符串,那么就离开while
循环。
PS:trim()
不需要,因为Scanner
next
方法返回下一个标记,这基本上意味着下一个字,因此type
已经被修剪。