2012-12-02 128 views
3

我正在參加CS課程,並且此代碼給我帶來了問題。「if」語句問題

  while (statScan.hasNext()){ 

     currentStat = statScan.next(); 
     if (currentStat = h); 
     {  
      hStat++; 
     } 
     System.out.println("" + currentStat); 

看看「if」語句。 Java說「不能將字符串轉換爲布爾值」,根據我的理解,boolean是一個真正的/錯誤的東西,所以Java不理解的是如何評估和比較字符串。我如何強迫它這樣做?

回答

1

Java中的=操作旨在.equals()一個因此,當您編寫x = y時,並不意味着等於y,而是將y的值賦給x

比較運算符是==運算符,但它會比較原始類型(int,char,float等),或者引用不是您需要的常用行爲的對象。對於任何不是原始類型的東西,應該考慮使用Object繼承的方法,即boolean equals(Object o)。要明白爲什麼如此,請看一下herehere

0

假設h是一個字符串,使用equals方法字符串比較爲:

 if(currentStat.equals(h)) 

目前使用的是賦值運算符=,其分配的hcurrentStat字符串值。

當您更改運營商比較操作==然後它將比較對象實例平等,而不是價值,我想你不希望/

+0

@ user1869638:我真的很驚訝這個時候使用''==操作符來比較字符串的建議,並且也越來越投了那麼多的:)我有從來沒有見過這個。可能是,我在這裏錯過了一些很大的東西。既然你使用'scan.next()',我知道它的字符串,因此我建議你使用'equals'而不是'=='。 –

4

做的問題是,你分配給它,而不是問,如果是等於(指定「=」,等於「==」)
這是該行的解決方案: 還,如果是字符串使用

if (currentStat.equals(h)) 
+1

不要在對象上使用==。改用.equals。 – ApproachingDarknessFish

+0

它是在評論中,我說如果這是一個字符串(它是),他應該使用等於 –

+0

@GoranŠtuc你最好編輯的問題,並把等於 – dreamcrash

1

這裏的幾個問題:

if (currentStat = h); 

首先,你必須在最後一個分號,這將導致你想要的if語句不發揮作用。它基本上有條件地執行一個空語句。以下代碼塊(您打算成爲有條件的)將始終運行。刪除分號以避免這種情況。

此外,您只有=而不是==。這意味着您正在將h的值分配給currentStat。這是一個經典的,經典的錯字。正如@YogendraSingh在另一個答案中提到的那樣,您應該使用equals()方法對Java中的字符串進行比較。否則,您只能比較兩個項目是否完全相同。當您需要使用equals()時,檢測相同的字符串文本是否保存在兩個不同的對象中。

因此改變這一行:

if (h.equals(currentStat)) 
+0

拿起流浪分號的榮譽。 – msandiford