0

たぶん私の問題はばかげていますが、私はそれを解決することはできません。

これが私のコードです:

public Velocity add(final Velocity velocity)
{
    Velocity vel;
    if(velocity.getClass().equals(CartesianCoordinate(x, y)))
    {
        double sumX = x + velocity.x;
        double sumY = y + velocity.y;
        Velocity v = new Velocity(CartesianCoordinate(x,y));
        v.x = sumX;
        v.y = sumY;
        vel = v;
    }

    if(velocity.getClass().equals(p))
    {
        do something...
    }
    return vel;
}

「vel」を返すことができない理由を誰かに教えてもらえますか?クラス変数を作成したくないのですが...

4

3 に答える 3

2

なぜ私が「vel」を返すことができないのか誰か教えてもらえますか

確かに、どちらの条件も当てはまらない場合は、値を指定していません。変数は明確に割り当てられていないため、その値を読み取って返すことはできません。その場合、何を返したいですか?それも有効ですか?その場合、おそらく例外をスローする必要があります。

個人的には、実際には各ifブロックから戻ります。ローカル変数が利点を追加しているとは思いません。その時点で、何が悪かったのかがより明白になります。

public Velocity add(final Velocity velocity) {
    if (...) {
        ...
        return ...;
    }
    if (...) {
        ...
        return ...;
    }
    // What should we do if we get here?
}

戻り値を決定する両方の条件がすぐtrueにそれを返すようになったので、一番下に到達した場合、どちらの条件も...と評価されていないため、どちらかを返したいということがより明白になります(IMO) 「空の」値、またはnull参照、または例外をスローします。

もちろん、これは、2番目の条件が最初の条件よりも効果的に優先されることを望まないことを前提としています-両方の条件が真の場合、最初のブロックに設定された値は、上書きされるため、おそらく無関係です2番目のブロックで。

また、何をするCartesianCoordinateのかは不明ですが、Javaメソッドにちなんで奇妙な名前が付けられています。それが返される場合、それはClass<?>間違いなく奇妙です。pここは何ですか?あなたの実際のコードがこれと多少異なるかどうかはわかりませんが、これがコンパイルされない理由を除けば、それは私には魚臭いにおいがします。

于 2013-03-23T20:10:40.297 に答える
1

ローカル変数にはデフォルト値がないため、初期化する必要があります。

valインスタンスフィールドまたは静的フィールドであり、初期化されていない場合は、アクセス時にデフォルト値を返します。

于 2013-03-23T20:10:49.963 に答える
0

値を持つ変数のみを返すことができます。そのため、ない場合もありvalます。

これを解決する簡単な方法はval、宣言を直接初期化することです。

Velocity vel = null; //or
Velocity vel = new Velocity();

または、ステートメントにelseブランチを追加する必要があります。ここでも初期化されます。ifvel

if(velocity.getClass().equals(CartesianCoordinate(x, y)))
{
    double sumX = x + velocity.x;
    double sumY = y + velocity.y;
    Velocity v = new Velocity(CartesianCoordinate(x,y));
    v.x = sumX;
    v.y = sumY;
    vel = v;
}else{
    vel = null;//or
    vel = new Velocity();
}
于 2013-03-23T20:15:43.283 に答える