2014-03-24 48 views
-4

我想知道什麼是錯的:這有什麼不對?

if (q == "outside" && q1 == "not alive") { 
System.out.println("bison"); 
} 

這種說法完美的作品:

if (q == "outside" && q1 == "alive") { 
System.out.println("bison"); 
} 

所有的如果包含語句「活着」的作品完美,但包含的語句所有如果「不活着」不起作用。

這是一個鍛鍊,我有沒有使用否則,如果要不要做。

全碼: -

import java.util.Scanner; 

class age04 { 
public static void main(String [] args) { 

Scanner keyboard = new Scanner(System.in); 

String q, q1,; 

System.out.println("Two more questions, baby!"); 
System.out.println("Think of something and i'll try to guess it!"); 


System.out.println("Question 1) Does it stay inside or outside or both"); 
q = keyboard.next(); 
System.out.println("Question 1) Is it alive?"); 
q1 = keyboard.next(); 


if (q == "inside" && q1 == "alive") { 
System.out.println("houseplant"); 
} 

if (q == "inside" && q1 == "not alive") { 
System.out.println("shower curtain"); 
} 

if (q == "outside" && q1 == "alive") { 
System.out.println("bison"); 
} 
if (q == "outside" && q1 == "not alive") { 
System.out.println("bison"); 
} 

if (q == "both" && q1 == "alive") { 
System.out.println("dog"); 
} 

if (q == "both" && q1 == "not alive") { 
System.out.println("cell phone"); 
} 

} 
} 
+4

你正在做一個普通的Java初學者的錯誤,那就是用'=='比較字符串。您應該使用'.equals(...)'代替。 – Jesper

回答

0

字符串應該比較喜歡這個,

q.equals("outside") 
q1.equals("alive") 
+0

我知道這太過分了,但如果答案會出現在問題的上下文中(放在'if..else'中)會更好。 – Astrobleme

1

使用,則equals()函數比較Java中的字符串的==功能不比較兩個字符串:

  if (q.equals("outside") && q1.equals("not alive")) 
      { 
      System.out.println("bison"); 
      } 

試試這個:

import java.util.Scanner; 

    class age04 { 
    public static void main(String [] args) { 

    Scanner keyboard = new Scanner(System.in); 

    String q, q1; 

    System.out.println("Two more questions, baby!"); 
    System.out.println("Think of something and i'll try to guess it!"); 


    System.out.println("Question 1) Does it stay inside or outside or both"); 
    q = keyboard.next(); 
    System.out.println("Question 1) Is it alive?"); 
    q1 = keyboard.next(); 


    if (q.equals("inside") && q1.equals("alive")) { 
    System.out.println("houseplant"); 
    } 

if (q.equals("inside") && q1.equals("not-alive")) { 
System.out.println("shower curtain"); 
} 

if (q.equals("outside") && q1.equals("alive")) { 
System.out.println("bison"); 
} 
if (q.equals("outside") && q1.equals("not-alive")) { 
System.out.println("bison"); 
} 

if (q.equals("both") && q1.equals("alive")) { 
System.out.println("dog"); 
} 

if (q.equals("both") && q1.equals("not-alive")) { 
System.out.println("cell phone"); 
      } 
    } 
} 
+0

我用這個每if語句...... 編譯完美.... 但是當它運行.... 那隻能說明答案如果與「活着」 ...... 這是嚴重的刺激性.... statments 請幫助..... –

+0

謝謝!!!! 但是有可能使用空格而不是破折號? –

0

==不比較字符串,對於你要使用equals()函數。

equals()只會返回true或false取決於你的串是否是一樣給予該函數的輸入。

0

其他人是正確的,但我想澄清一下,爲什麼你需要使用==比較字符串代替平等。

Java與其他語言不同,字符串是不可變的對象,而不是數組的值。當比較primitive values(例如int和char)時,==運算符正常工作。但是,當您在Java中使用==來比較對象時,操作符通過比較內存引用進行工作,而不是比較對象的基礎值。因此,根據==運算符,具有相同值的兩個字符串將不會相同,除非與每個對象關聯的內存引用相同。這就是爲什麼==會用於比較char,因爲它正在尋找原始值的相等性,所以它不適用於整個字符串,因爲沒有原始值進行比較。

equals方法是什麼,是通用於所有Object Java中的類,並指定如何檢查特定類的成員之間的平等。 equals的默認實現可以覆蓋,以便不同類型的比較可以用於不同類型的對象(例如,通過id號比較員工,通過sku比較產品等)。我不會去重寫equals方法(這是一個真正的痛苦得到正確的),但它有助於理解爲什麼使用.equals會從==給出不同的答案。

+0

如果您提供了什麼== IS實際上是比較 - 對象引用,那麼您的答案會更加正確。 – Gimby

+0

你說得對,我會更新。 – Rarw