2014-06-08 155 views
-1

我有一個問題,我試圖比較一個對象的名稱(字符串)與另一個字符串,我試過使用.equals()以及==但似乎都沒有工作在我的情況。Java:檢查一個字符串是否等於一個字符串

我現在所擁有的代碼是:

public boolean checkingObjectName(String checkName) 
{ 
    for (int i=0; i<count; i++) //where 'count' has a value of 3 
    { 
     if (product[i].getName().equals(checkName)) //where product[i] has been initialised 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 
} 

程序總是返回false,即使已設置爲product[i]名稱相同給出的參數。我試着查看與.equals()==以及其他字符串引用有關的其他問題,但我沒有找到與我的問題有關的任何運氣。

我見過人使用compareTo(),但我不確定這是否是我的代碼所必需的,我不完全確定如何使用它。


編輯:正如評論所說的Houssni,我剛纔已經意識到return語句結束循環和方法。是否可以檢查每個產品的名稱,而不必在第一次檢查後終止方法,並讓它返回一個布爾值?

編輯2:我已經修改了代碼已經提供的答案是怎麼說的,這就是:

public boolean checkingObjectName(String checkName) 
{ 
    for (int i=0; i<count; i++) //where 'count' has a value of 3 
    { 
     if (product[i].getName().equals(checkName)) //where product[i] has been initialised 
     { 
      return true; 
     } 
    } 
    return false; 
} 

我仍然得到同樣的問題與product[i].getName()不等於checkName和方法返回false,即使它們應該相等。爲什麼會發生這種情況的任何可能性,因爲我查看了我的代碼,我不確定。

編輯3:,涉及到的上述代碼塊中的唯一的其他代碼是從另一個類的參數的輸入,這是:

String checkName = JOptionPane.showInputDialog("Enter the name: "); 
while (storingProducts.checkingObjectName(checkName) == false) //assume for storingProducts 
{ 
    JOptionPane.showMessageDialog(null, "No products were found. Please re-input name."); 
    checkName = JOptionPane.showInputDialog("Enter the name: "); 
    storingProducts.checkingObjectName(checkName); 
} 
if (storingProducts.checkingObjectName(checkName) == true) 
//extra code 

所以,這是所有與該代碼我問題。我仍然不確定爲什麼該方法返回false,雖然兩個值都接收到相同的字符串值。

編輯4:productcount從類來與checkingObjectName方法:

public class Store 
{ 
    private Product[] product; //Product is another class that just sets and gets 
    private int count=3; 

    public Store() 
    { 
     product = new Product[count]; 
     for (int i=0; i<count; i++) 
     { 
      product[i] = new Product(); 
     } 
    //extra code 

SOLUTION

我固定的問題:不是使用.equals(),我嘗試使用.equalsIgnoreCase()和有效。

+0

將您的所有代碼發佈到測試它並初始化產品陣列 –

+0

爲什麼循環如果只循環一次? return語句終止循環和方法。 – Houssni

+0

if!product [0] .getName()。equals(checkName)循環停止並且方法返回false – j3ny4

回答

6

該方法一返回count 0就返回並且找不到匹配項。如果你通過你的數組要循環,直到找到一個匹配的名稱,你的代碼應該是這樣的:

public boolean checkingObjectName(String checkName) 
{ 
    for (int i=0; i<count; i++) //where 'count' has a value of 3 
    { 
     if (product[i].getName().equals(checkName)) //where product[i] has been initialised 
     { 
      return true; 
     } 
    } 
    return false; 
} 
+0

我已經修改了代碼,以便爲我澄清,但該方法仍然返回false,即使參數是 - 例如 - _Smoothie_和'product [i] .getName()'也等於_Smoothie_。 – iyea070

+0

'我'是什麼價值? – shmosel

+0

'i'的值爲0,但每當'product [i] .getName()'不等於'checkName'時就會增加。最終,如果每個「產品」與「checkName」的值不同,那麼它將退出循環,並且該方法返回false。 – iyea070

0

既然你有一個return語句,將在每一個更多鈔票的情況達(if條件truefalse ),方法將在第一次迭代時退出總是

你能做什麼?如果你想如果名稱數組中存在,否則false回到true,你可以這樣做:

public boolean checkingObjectName(String checkName) 
{ 
    for (int i=0; i<count; i++) //where 'count' has a value of 3 
    { 
     if (product[i].getName().equals(checkName)) 
      return true; 
    } 
    return false; // if after all elements has been checked 
        // and none was equal to 'checkName', return 'false' 
} 
0

如何收集地名成List(或Set),並檢查是否checkName比賽嗎?

public boolean checkObjectName(final String checkName) {  
    List<String> productNames = new ArrayList<String>(); 
    for (Product prod : product) { 
     productNames.add(prod.getName()); 
    } 
    return productNames.contains(checkName); 
} 

請注意,如果您要比較區分大小寫字符串這隻會工作。另外,

public boolean checkObjectName(final String checkName) {  
    List<String> productNames = new ArrayList<String>(); 
    for (Product prod : product) { 
     productNames.add(prod.getName().toLowerCase()); 
    } 
    return productNames.contains(checkName.toLowerCase()); 
} 

如果你不喜歡這種方式,你可以使用已經給出的那些,和equalsIgnoreCase更換equals

+0

是的,使用'equalsIgnoreCase()'解決了我的問題。 – iyea070

0

有兩種方法比較字符串:

  • 首先是通過字符串的地址比較。如:string blue = string red
  • 比較字符串的第二種方法是通過值。這可以通過使用string.equals("StringValue")來完成。
相關問題