2011-12-28 88 views
4

檢查字符串我有這樣的代碼:閱讀並從用戶輸入

import java.util.Scanner; 

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

    Scanner input = new Scanner(System.in); 
    String answer = input.nextLine(); 

    if(answer == "yes"){ 
     System.out.println("Yea I programmed this right!"); 
    }else{ 
     System.out.println("Awww :("); 
    } 
    } 
} 

但是當我運行它,並鍵入,應該說

「是啊,我編程這個權利!」

但它說

呀:(

+3

甲'String'是一個對象,而不是原始的。 – BalusC 2011-12-28 21:34:05

回答

9

您正在比較字符串不正確。您必須使用equals()方法,像這樣:

if (answer.equals("yes")) 

當你在Java編程中,操作員==一般用於比較原始數據類型(intdouble等)。如果使用==來比較兩種對象類型(比如字符串),則比較它們的標識,即檢查它們是否引用內存中的同一對象。在你的情況下,你需要的是如果它們是等於:如果它們具有完全相同的值(在這種情況下是一串字符),即使它們是兩個不同的對象 - 爲此,您必須使用equals()方法。

編輯:

更妙的是,爲防止NullPointerException,它被認爲是一個很好的做法翻轉比較秩序,先寫你與比較字符串,像這樣:

if ("yes".equals(answer)) 

原因很簡單:如果由於某種原因answernull,上面的對比將評估爲false(意爲:answer"yes"),而第一個版本的代碼將導致NullPointerException嘗試調用equals()方法的null值。

+3

+1對這裏的一切,但你還是應該翻轉比較爲了防止可能出現NPE。 (在我的答案的詳細信息。) – ziesemer 2011-12-28 21:42:36

+0

@ziesemer同意,我編輯我的答案。 – 2011-12-28 21:48:03

1

使用String.equals()代替==

在Java中,==正在測試2個字符串是完全相同的情況下,在「a」!=「a」。相反,您需要測試"a".equals("a")

因此替換

if(answer == "yes"){ 

有:

if("yes".equals(answer)){ 

注意的是,這裏翻轉的順序是故意的,因爲這可以防止一個NullPointerException如果answer爲空 - 如"yes".equals(null)只會返回false,而不是拋出異常。 (在null上調用操作會拋出NullPointerException,I.E. null.equals("yes")。)

2
if(answer == "yes"){ 

應該

if("yes".equals(answer)){ 

==是不正確的String平等,我們處理這種情況answer是空的情況下)

1

更改此

if(answer.equals("yes")){ 
    System.out.println("Yea I programmed this right!"); 
}else{ 
    System.out.println("Awww :("); 
} 

equals()方法比較小號字符串(答案在你的例子)到指定的對象。當且僅當參數不爲null並且是表示與此對象相同字符序列的String對象時,結果爲true。

明白,equals()方法和==操作執行兩種不同的操作是很重要的。如剛剛提到的,equals()方法比較String對象內的字符。 ==運算符比較兩個對象引用以查看它們是否引用同一個實例。

0

進口java.util.Scanner的;

公共類實施例{ 公共靜態無效的主要(字串[] args){

Scanner input = new Scanner(System.in); 
String answer = input.nextLine(); 

/*Edit your next line as mine,u'll get the correct ans...*/ 

if("yes".equals(answer)){ 
    System.out.println("Yea I programmed this right!"); 
}else{ 
    System.out.println("Awww :("); 
} 

} }

0

,或者您可以嘗試使用 「的compareTo()」 函數

private static Scanner input; 
private static String choice; 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    input = new Scanner(System.in); 
    choice = input.nextLine(); 

    if (choice.compareTo("yes") == 0) { 
     System.out.println("Yea I programmed this right!"); 
    } else { 
     System.out.println("Awww :("); 
    } 

}