2016-02-17 29 views
-3

我有問題與下面的if statement block無法在原始類型int錯誤上調用equals(String)?

public void viewaccount () { 
    Scanner getinput = new Scanner(System.in); 
    System.out.println("Enter your account number to log in"); 
    int login = getinput.nextInt(); 
    if (login.equals("accnumber")) { // <== here 
     /* to be written */ 
    } 
} 
+6

恩,是的。你有一個'int'。你期望什麼叫'equals(「accnumber」)'會做什麼?你想達到什麼目的?如果你告訴我們你的目標,我們更有可能幫助你。 –

+3

您不能使用在基本類型int上調用的'.equals()'方法。你的錯誤信息解釋了這一點你很可能想說'if(「accnumber」.equals(login))',或者更一般地說:如果(String.valueOf(login).equals(「accnumber」))' – Kon

+0

我想看看它是否將用戶鍵入的帳號編號與數組列表相匹配。有沒有其他建議? @JonSkeet – salman

回答

2

.equals(String)是一種檢查兩個字符串是否包含相同字符/文本的方法。顯然,你不能在int上調用.equals()來檢查它是否包含與字符串相同的字符,因爲int不包含字符(當然,直到它被轉換爲人類可讀形式)。

如果要檢查用戶是否輸入了正確的帳號,你應該做這樣的事情:

public void viewaccount() { 

    Scanner getinput = new Scanner(System.in); 
    System.out.println("Enter your account number to log in"); 
    int login = getinput.nextInt(); 

    // Correct account number: 
    int correctAccountNumber = 1234567; 

    if (login == correctAccountNumber) { 
     // Hooray! Success. 


    }else{ 
     System.out.println("You have entered the incorrect account number."); 
    } 

} 

如果這是有史以來在現實世界的應用中使用,然後從安全角度來看,這將是一場噩夢,但爲了學習,這應該可以解決你的問題。


給你如何.equals()作品,我建議在the Java Objects class讀了一個更深入的樣子。 intprimitive data type,所以它沒有像String那樣的內置方法。String被認爲是composite data type,其允許String具有諸如.length().equals(), .trim()等的方法和屬性等。

在Java中,所有類都Object作爲超允許所有類和複合數據類型的繼承像.equals().hashcode(),並且.toString()方法,但最重要的是,所有的複合數據類型也可以實現自己的方法。例如,Integer數據類型(它是原始文件int的包裝)添加了諸如.parseInt().compare()之類的函數。

與大多數語言不同,Java爲所有這些數據類型提供了原始數據類型和內置包裝類。 intIntegerbooleanBooleanlongLongcharCharacter。而且這個列表繼續適用於所有其他基元類型。

0

equals方法是類Object的方法。原始類型(如int)不是對象,並且無法訪問equals方法。

當你想比較原始類型時,你必須使用==。在你的情況,你試圖用一個String(這是一個文本)比較的int(這是一個數字),這沒有任何意義 - 這將永遠是false

也許在你的情況,你應該讀取輸入作爲像這樣的字符串:

String login = getinput.next(); 

然後,可以使用該方法equals因爲login變量將是String型,其延伸Object並且可以與equals進行比較的。

編輯

如果你仍然想爲一個數字讀取數據,你應該事後登錄變量從int轉換爲字符串,以便將它與另一個字符串進行比較。

這是這樣完成的:

int login = getinput.nextInt(); 
    if (String.valueOf(login).equals("accnumber")) { 
     /* to be written */ 
    } 

Ofcourse,這將始終返回false,所以這樣的工作只有在String字面你給的是類似「131423」。我真的希望這個「accnumber」是一個虛擬的字符串,只用於例子。否則,我沒有看到任何其他好辦法。

+0

儘管這可能會解決編譯錯誤,但顯然不是OP所打算做的事情(在提示'輸入賬號登錄') – Krease

+0

我會給我的答案添加一些更多的解釋,以便他可以選擇。 –

+0

對不起,但編輯根本沒用 - 一個'int'轉換爲'String'將_never_等於文字字符串「accnumber」 – Krease

0

如果你想比較一個int,你不需要使用.equals()方法。由於您將輸入轉換爲int,因此可以使用「==」將一個int與另一個進行比較。另外,「accnumber」需要被初始化爲一個int變量。

-1

只需抓住下一個字符串,而不是下一個int。

String input = getInput.next(); 
input.equals("accountNumber"); 
+0

雖然這可能會解決編譯錯誤,但顯然不是OP打算做的事情(在提示'輸入帳號登錄') – Krease

+0

@Chris這正是操作系統正在嘗試執行的操作。他們想要將用戶輸入的值與已知值進行比較。爲什麼在String上使用int? – matt

+0

用戶輸入的值是一個帳號 - 即:12345.這永遠不會等於文字字符串「accountNumber」 – Krease

相關問題