使用while循环不起作用的构造函数输入验证

时间:2017-04-16 03:21:01

标签: java while-loop java.util.scanner equals composition

我正在尝试使用构造函数中提供的验证检查来初始化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;
    }
}

1 个答案:

答案 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已经被修剪。