2013-10-17 50 views
0

這是程序爲什麼跳過While循環中的If語句?它打印出「沒有工作」,爲什麼?

import java.util.Scanner; //imports class 

public class blank2 { 

    public static void main(String[] args) { 

    Scanner in = new Scanner(System.in); 
    boolean valid = true; 
    String ans; 
    ans = in.next(); //answer is a string 

如果你輸入「Y」,這是不言而喻的權利else語句。

while (valid == true) 
{ 

它總是跳過此聲明

if (ans == "y") 
    { 
     System.out.println("it works"); 
     valid = false; 
    { 
    else 
    { 
     System.out.println("no work"); 
     valid = false; 
    { 
} 


    } 

} 

它只是不會工作

回答

6
if (ans == "y") 

不要==比較字符串。比較對象引用(相同的字符串)。使用:

if ("y".equals(answer)) 

改爲。它會比較字符串是否相等(檢查它們是否相同,而不是相同)。由於任何原因,如果answer爲空,由於存在空指針異常的風險,因此我不使用answer.equals("y")

+0

謝謝!完美工作 – user2892492

0

在字符串中,請不要使用==,您可以改爲使用compareTo

if ("y".comprateTo(answer)) 

有了這個方法,你可以檢查它們是否相同,或者一個比另一個更大。

讓我們知道您是否有任何問題

+0

該代碼產生類型不匹配。你可以使用'if(「y」.comprateTo(answer)== 0)'但是'if(「y」.equals(answer))'更直觀,可能更快。 – Daniel

+0

是的,這是真的。 'equals'已經在這裏,我只給了@ user2892492其他選項給未來。 –

+0

@ X-Pippes我認爲compareTo在開始排序之前並不是非常有用。 – hexafraction

相關問題