2013-11-02 41 views
-4

試圖找出我的代碼在這裏有什麼問題 - 我想要用濃度數組檢查用戶輸入,並且如果他們輸入任何數組以打印出正面的顯示消息...但是,我得到無論輸入如何,每次輸出「是,這是有效的濃度」。試圖學習方法/布爾值。需要幫助

import javax.swing.JOptionPane; 
public class BASIT_Concentration_Check 
{ 
    public static void main(String[] args) 
    { 
     String[] concentrations = {"DTP","HCIT","INFS","NTEL","WDM"}; 
     String studentconcentration = getStudentConcentration(); 
     boolean concentrationvalid = isConcentrationValid(studentconcentration, concentrations); 
     displayMessage(concentrationvalid); 
    } 

    public static String getStudentConcentration() 
    { 
     String studentconcentration = JOptionPane.showInputDialog(null,"What is your B.S. AIT Concentration?"); 
     return studentconcentration; 
    } 

    public static boolean isConcentrationValid(String studentconcentration, String [] concentrations) 
    { 
     boolean concentrationvalid=false; 
     for (int i=0;i<concentrations.length;i++) 
     { 
      if (concentrations[i]==studentconcentration) 
       { 
        concentrationvalid = true; 
       } 
     } 
     return concentrationvalid; 
    } 

    public static void displayMessage(boolean concentrationvalid) 
    { 
     if (concentrationvalid==true) 
     { 
      JOptionPane.showMessageDialog(null, "Yes, that is a valid concentration"); 
     } 
     else 
     { 
      JOptionPane.showMessageDialog(null,"I'm sorry, that is not a valid concentration"); 
     } 
    } 
} 

回答

1

if (concentrations[i]==studentconcentration)

那不是你如何在Java中比較字符串!

而是使用if (concentrations[i].equals(studentconcentration))

基本上==只比較引用(或值原始類型),爲爲什麼是這樣一個更詳細的描述,see this question

+0

這並不能解釋爲什麼他每次都得到「是的,這是有效的」。這可以解釋爲什麼他每次都會得到「無效」,但事實並非如此。 –

+0

@MrTi這是真的,在這種情況下,問題是不可重現的。這意味着OP很可能不會複製**代碼,所有代碼以及代碼。**或者沒有提供足夠的細節。或者在評論中誤寫錯誤的信息。 –

0

你有一個比較錯誤。在Java中,由於字符串不是原始類型,因此使用==運算符會失敗,因爲它們是對象。所以你必須使用String類的equals方法,就像這樣。

if (concentrations[i].equals(studentconcentration)) 

這應該有效。如果驗證爲真,則可以添加break;語句來保存一些cpu處理。還有一兩件事,也沒有必要在布爾的,如果比較增加== true,你可以只使用

if (concentrationvalid) 

上面的語句是一樣的你的聲明,但更具有可讀性。

希望這會有所幫助。

0

您需要使用.equals()來比較Java中的字符串。它將返回true或false的布爾值,如果爲true則會激活if語句,如果爲false則跳過它。

如果您希望比較忽略字母是大寫還是小寫,您也可以使用.equalsIgnoreCase()

例:

if (concentrations[i].equals(studentconcentration)) 

if (concentrations[i].equalsIgnoreCase(studentconcentration)) 

希望幫助!