循环一个条件总是返回true?

时间:2015-11-18 16:27:59

标签: java while-loop

我正在尝试使用两个" ifs"进行条件语句,并且当我输入正确的内容时它会起作用,但是当我输入一个不正确的口袋妖怪和一个正确的级别时它仍然有效。我很确定我的while语句中的一个条件总是正确的(第一部分)。这是代码(抱歉格式化,只知道它在Java环境中的格式正确):

while ((!(Pokemon.equalsIgnoreCase(Pikachu)) || !(Pokemon.equalsIgnoreCase(Charmander)) || !(Pokemon.equalsIgnoreCase(Squirtle)) || !(Pokemon.equalsIgnoreCase(Bulbasaur))) && !((Level <= 15)&&(Level >= 1 ))) {

  System.out.println();
  System.out.println("Which one would you like? What level should it be?\n1 to 15 would be best, I think.");
  Pokemon = sc.next();
  Level = sc.nextInt();

  if ((Level <= 15) && (Level >= 1)) {
    if ((Pokemon.equalsIgnoreCase(Pikachu)) || (Pokemon.equalsIgnoreCase(Charmander)) || (Pokemon.equalsIgnoreCase(Squirtle)) || (Pokemon.equalsIgnoreCase(Bulbasaur))) {
                System.out.print("Added level " + Level + " " + Pokemon + " for " + Trainer + ".");
    }
    else {
      System.out.println("Invalid Pokemon!");
    }
  }
  else {
    System.out.println("Invalid Level!");
  }
}

2 个答案:

答案 0 :(得分:1)

Pokeman将永远不是X或不是Y,它是基本逻辑,因为如果它是X,那么不是-Y是真的。如果它是Y,那么不是-X是真的。如果不是,那么两者都是真的。

||更改为&&并仔细考虑您的逻辑。

答案 1 :(得分:0)

应该是:

    while ((!(Pokemon.equalsIgnoreCase(Pikachu)) && 
!(Pokemon.equalsIgnoreCase(Charmander)) && 
!(Pokemon.equalsIgnoreCase(Squirtle)) && 
!(Pokemon.equalsIgnoreCase(Bulbasaur))) && 
!((Level <= 15)&&(Level >= 1 )))