2014-11-25 109 views
0

它编译,只是它不会初始化while (choice = false)因此无论输入什么ans,它都不会显示“Invalid input,enter a,b,c:”并重申。布尔方法不返回false

import java.util.Scanner; 
public class Test 
{ 
    public static void main(String[] args) 
    { 
      Scanner kb = new Scanner(System.in); 
      String ans; 
      boolean choice; 
      System.out.print("Enter a, b, c: "); 
      ans = kb.nextLine(); 
      choice = isValidChoice(ans); 
      while (choice = false) 
      { 
        System.out.print("Invalid input, enter a, b, c: "); 
        ans = kb.nextLine(); 
        choice = isValidChoice(ans); 
      } 
      if (choice = true) 
      { 
        System.out.println("Your input was " + ans); 
      } 
    } 
    public static boolean isValidChoice(String choice) 
    { 
      if (choice.equalsIgnoreCase("a") || choice.equalsIgnoreCase("a") 
      || choice.equalsIgnoreCase("a")) 
      { 
        return true; 
      } 
      else 
      { 
        return false; 
      } 
    } 

} 
+3

我想你可能想'=='而不是'='。比较与分配。更好的是,你可以使用'while(choice)'这个检查是否为true或'while(!choice)'这个检查是否为false。 – csmckelvey 2014-11-25 03:27:47

+0

我还注意到了一件事,但它不是问题的原因。你有三个choice.equalsIgnoreCase(“a”)..只是为了引起你的注意。 – 2014-11-25 03:48:49

回答

1

当你需要比较,这意味着在Java中的平等,而=意味着分配始终使用==。这与PL/SQL等语言不同。

因此,当您拨打while(choice =false)时,Java只会将false指定为变量选项,它不会将choice与false进行比较。

要使用等于运算您应该使用while(choice==false)代替,同样在if (choice == true)

检查operators更多细节

1

您正在使用的分配。 while(!choice)while(choice==false)。相同于if。在你的情况下,你需要区分有效的和实际的选择。也许让函数返回比布尔值更多的值会更容易。

还有一个有用的提示:永远不要忽略编译器或IDE的警告。它会告诉你,如果你做了一些愚蠢的事情,就像在表达式中分配一样。