2017-04-16 75 views
1

我想使用我在構造函數中提供的驗證檢查來初始化類Animal的實例字段。它似乎工作,如果我輸入正確的值 - 例如老虎 - 當調用構造函數,但不起作用,如果我輸入一個不正確的值後輸入相同的值。出於某種原因,它似乎不會退出while循環。我正在使用組合來測試字段值是否正確輸入。使用while循環不工作的構造函數輸入驗證

public class Animal {0}私有字符串類型;

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

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()因爲Scannernext方法返回下一個標記,這基本上意味着下一個詞,所以type將已經修整。