2011-12-20 2 views
0

古いJavaコードをScalaに変換しています。私はこれを持っています。JavaをScalaコードに変換するときの奇妙な動作。関数内に新しいオブジェクトを返す

class XYCustomRenderer(dataMax: Double, dataMin: Double) extends XYShapeRenderer with BaseChart { 

    override def getItemPaint(series: Int, item: Int): Paint = { 

     val seriesCollection: TimeSeriesCollection = getPlot.getDataset(OUNCES_CHART).asInstanceOf[ TimeSeriesCollection ] 

     val ounce = seriesCollection.getYValue(series, item) 

     if (ounce >= dataMax || ounce <= dataMin) { 
      new Color(255, 161, 15, 200) 
     } 

     new Color(242, 29, 5, 150) 

    } 
} 

これはまっすぐな変換です。

色を正しく戻すことに問題があります。

ここに示すように記述すると、常に下の色が返されます。

私はこれを書いたら(返品あり)。

if (ounce >= dataMax || ounce <= dataMin) { 
      return new Color(255, 161, 15, 200) 
     } 

     new Color(242, 29, 5, 150) 

いつもifブロックの色を返します。それは私には意味をなさない。スカラーは私が確信していない特定の方法で動作していますか?

私はロジックに基づいて2つの異なる色を返そうとしています。私は間違って何をしていますか?

おかげ

+0

ifステートメントでreturnステートメントで常に色を返す場合、条件は常にtrueです。 –

答えて

8

ifはScalaの式です。メソッドの最後の式が暗黙的に返されます。だから、(else句に気づく)、これを記述する必要があり、次のいずれか

if (ounce >= dataMax || ounce <= dataMin) 
    new Color(255, 161, 15, 200) 
else 
    new Color(242, 29, 5, 150) 

または明示的なreturn文を使用して、バージョンを。

+0

意味があります。ありがとう –

0

あなたは、ログインする(またはデバッガを使用)オンスの実際の値を確認するためにしようとするデータマックス、およびdataMinましたか?

seriesCollection.getYValue(series、item)によって返される型は何ですか?

+0

まあ、dataMinとMaxが正しいです。何が起こっているのかは、私が新しい色でリターンを入れないとうまくいかないことです。私は両方のためのリターンを置かなければならない。なぜ私はそれがなぜだろうと思っていたのですか? –

+0

さて、agilesteelの答えは私には明らかです;-)もっと必要な場合は、教えてください! – blackbox