2011-01-14 15 views
1

文字列を文字列値と比較しようとしています。しかし、どちらかといえばシンプルですが、比較ではnullが返されます。私が望むのは、一致した値を出力し、ヌルリターンを無視することだけです。しかし、出力はヌル値も示しています。私はこれをさまざまな方法で試しましたが、ヌル値を示し続けます。文字列を比較するJava

class ActionMovie extends cdinventoryprogram { 

    private String Atitle; 
    private double Avalue; 
    private double Rstock; 
    private String Ctitle; 

    public ActionMovie(String title, int itemNumber, int numberofUnits, double unitPrice){ 
     Atitle = title; 
     Avalue = numberofUnits * unitPrice; 
     Rstock = unitPrice * .05;} 

    public String getActionTitle(){ 

     if (Atitle.equals("Matrix")){ 
     Ctitle = Atitle; 
     }else if (!Atitle.equals("Matrix")){ 

     } 
     return Ctitle; 
    } 

}

パブリッククラスcdinventoryprogram {

public static void main(String[] args) { 

     ActionMovie myAction[] = new ActionMovie[DEFAULT_LENGTH]; 

     myAction[0] = new ActionMovie ("The Illusionist", 1, 5, 15.99); 
     myAction[1] = new ActionMovie ("Matrix", 2, 3, 14.99); 
     myAction[2] = new ActionMovie ("Old School", 3, 6, 12.99); 

      for (ActionMovie currentActionMovie : myAction){ 
      CAction = currentActionMovie.getActionTitle(); 
      JOptionPane.showMessageDialog(null, "Your action movie is: " + CAction); 

}}}

+0

'Ctitle'は初期化されていません。 Java変数は小文字で始まります。 – Nishant

答えて

2

nullの代わりに空の文字列を返したいとしますか?それからちょうどそうする。

if (Atitle.equals("Matrix")){ 
    Ctitle = Atitle; 
} else { 
    Ctitle = ""; 
} 
return Ctitle; 

ifはかなり冗長であるので、私はもそれを除去することに留意されたいです。

実際にnullの場合はNullPointerExceptionとなるように注意してください。Atitleの場合は、これを防ぐには、"Matrix"は決してnullではないので、次のようにします。問題に関係のない

if ("Matrix".equals(Atitle)){ 
    Ctitle = Atitle; 
} else { 
    Ctitle = ""; 
} 
return Ctitle; 

、私は標準Java naming conventionsを通じて自分自身を取得することをお勧めしたいです。クラス名は、大文字と小文字の変数名で始まる必要があります。この方法で、コードは他のすべてのJava開発者(自分自身を含む)にとってより読みやすくなります。


更新コメントどおり:

いいえ、私は文字列が一致しない場合は何を返すようにしたくありません。同じでない場合は値を返します。 - user569127 3分前

その後、ちょうどnullを返します。これにより、問題がに変更され、値が表示されます。 nullの場合は表示しないでください。例えば。

if (CAction != null) { 
    JOptionPane.showMessageDialog(null, "Your action movie is: " + CAction); 
} 

この質問の混乱は、「返品」と「表示」という用語が混同されている可能性があります。

+0

+ none none for invasive suggestion – davogotland

+0

いいえ、文字列が一致しない場合、何も返さないようにします。同じでない場合は値を返します。 – user569127

+0

回答の更新を参照してください。 – BalusC

2

変更:

private String Ctitle; 

に:

private String Ctitle = "" 
+0

null値を削除していただきありがとうございます。しかし、出力にはまだヌルが表示されており、3つの出力を与えています。配列には3つの項目があり、一致しない文字列と一致した文字列を出力しています。 – user569127

+0

+1:変数を初期化して、うまくいくはずです! –

+0

私は非最終変数の直接初期化を考慮していますが、特に空文字列の場合はそれが貧弱です。これに加えて 'getActionTitle()'が、 'Atitle'がおそらくセッターによって変更された後に、同じインスタンス上で呼び出されたときには、これは問題を解決しません。 – BalusC

0

AtitleがMatrixと等しくない場合、Ctitleは常にnullになります。 Ctitleのデフォルト値を設定して、nullを返さないようにします。

0

問題は、あなたのメンバ変数CTitlenullに(デフォルトでは)初期化され、それが文字列「マトリックス」に等しい(それ以外の場合は、その値に変化がない)場合は、あなたのgetActionTitle()方法だけその値を更新していることです。したがって、このメソッドは文字列 "null"として出力するデフォルト値(null)を返します。

戻り値をどこかに出力するときに「null」を表示したくない場合は、nullをチェックしてそれに応じて動作するか、デフォルト値のCTitleを空の文字列("") 。

0

Atitleが正しく設定され、ある時点で「Matrix」に等しいことは確かですか?私は比較する前にAtitleの値をチェックするためにあなたのコードにブレークポイントを設定することをお勧めします。コンストラクタでCtitleを初期化することもできます。