2011-07-26 52 views
-1

我剛開始學習代碼(特別是Java),並且我測試了一個密碼系統,當你輸入密碼時它變成變量「password」並且它檢查它是否它等於password2,實際的密碼。下面的代碼:「不兼容的操作數類型int和字符串」

import java.util.Scanner; 

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

     Scanner test = new Scanner(System.in); 
     int age; 
     int password; 
     String password2; 
     password2 = "Call of Duty"; 

     System.out.println("Please enter your age:"); 
     age = test.nextInt(); 



      if (age >=18) { 
       System.out.println("You are old enough."); 
       System.out.println("Please enter the password:"); 
       password = test.nextInt(); 
       if (password == password2) { 
        System.out.println("Welcome back!"); 
       }else{ 
        System.out.println("The password you typed was incorrect."); 
       } 

      }else{ 
       System.out.println("You are too young."); 
      } 



    } 
} 

我想在嵌套的if語句是否我匹配的密碼2鍵入的密碼,「使命召喚」,以檢查;但問題是它不適用於字符串。這個問題的標題是出現的錯誤。有人可以幫幫我嗎?

+0

這個任務沒有關閉(該術語在SO上有非常具體的含義)。如果您的問題已得到解答,只需接受最能幫助您的答案即可。 –

+0

要檢查兩個字符串是否相同,您必須使用'.equals'方法而不是'=='來檢查引用。還要將密碼類型更改爲字符串。 – Logan

回答

2

比較,你應該使用字符串時,等於代替== 所以使用

if(password.equals(password2){ 
do something 
} 
+0

謝謝,我試了一下,它的工作,但做空格或上限不工作,因爲密碼2等於「使命召喚」,我輸入它沒有工作,我改變它「嗨」,它的工作。 –

+0

請在下面查看我的評論。如果使用'nextLine()'方法,則可以獲取用戶輸入的整個字符串以及空格。 –

9

我試着給的,而不是提供完整的答案的提示:

檢查的passwordpassword2的數據類型。他們爲什麼不同?

+0

密碼是您輸入的內容,並且代碼會檢查它是否與密碼2相匹配,密碼2就是實際的密碼。 –

+0

int password;字符串password2;如果(密碼==密碼2)始終爲假,則「int」不能等於「字符串」......(事實上,它甚至不會編譯......爲什麼不先修復編譯器錯誤; D ) –

+0

@Daniel:爲什麼'int'類型的'password'?用戶只能輸入數字嗎? –

1

你必須做一些改動。

第一個password應該是String類型,因爲您想在此存儲字符串並將其與另一個字符串進行比較。

接下來,在age = test.nextInt();之後,您應該執行test.nextLine()以在輸入末尾消耗換行符。我們在閱讀密碼時不想閱讀這些內容。

接下來,您應該使用password = test.nextLine();來讀取用戶輸入的密碼。

最後,您應該使用:if (password.equals(password2))進行比較。 ==比較兩個String對象是否具有相同的引用,即它們是否與Java已知的String對象相同。這裏您需要.equals(),因爲它會比較兩個String對象的內容是否相等。在這種情況下,passwordpassword2引用了兩個不同的可能具有相同內容的String對象。

+0

test.nextLine()似乎沒有做任何事情,並且改變test.next()來測試。nextLine()代表密碼,因此當您輸入正確的年齡時,顯示「請輸入密碼:您輸入的密碼不正確。」 –

+0

引用來自我的回覆中的部分,對於解決您遇到的問題非常重要:「接下來,就在'age = test.nextInt();'之後,您應該放置一個'test.nextLine()'來消耗換行符輸入結束,當我們讀取密碼時,我們不想讀這個。「 –

相關問題