2014-11-25 90 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的警告。它會告訴你,如果你做了一些愚蠢的事情,就像在表達式中分配一樣。