0

メソッドがメインメソッドで呼び出されたときに値を返す方法について質問がありました。ここに私の部分的なコードがあります:

 import java.util.ArrayList;


public class Race {

private ArrayList<Car>cars;


 public Race(){
cars=new ArrayList<Car>();
}

public Car find(double position){
for(Car d:cars){
    if(d.getPosition()==position){
        return d;
    }
}
return null;
}
 .................

メインクラスで find メソッドを呼び出したとき:

     public class Test {

public static void main(String[] args) {

    Race race=new Race();
    Car mazda=new Car("Mazda",1.0,1.0,2.0,2.0);
    Car honda=new Car("Honda",1.0,1.0,1.0,2.0);
    race.addCars(mazda);
    race.addCars(honda);

     System.out.println(race.find(1.0).getName());

3 番目の値は位置です。これは、マツダとホンダが同じ位置にあり、両方を出力することになっていることを意味しますが、実行するとマツダのみが出力されます。混乱しています。アドバイスをお願いします。乾杯!

4

4 に答える 4

3

メソッドから返せる値は 1 つだけです。ただし、次を返すことができますList

public List<Car> find(double position) {
    List<Car> ret = new ArrayList<Car>();
    for (Car c : cars) 
        if (c.getPosition() == position)
            ret.add(c);
    return ret;
}

これだけ行うと、次の出力が得られます。

[mazda, toyota]

それぞれを別の行に入れたい場合は、リストを繰り返し処理して、mainそれぞれを出力する必要があります。

for (Car c : race.find(1.0)) 
    System.out.println(c.getName());
于 2013-10-08T18:34:26.107 に答える
2

ここでいくつかのこと:

  1. メソッドから返せるのは 1 つだけです。メソッドは type を返します。Carつまり、文字どおり1 つの Carオブジェクトが返されます。複数を返したい場合は、車の配列 ( Car[]) または車のコレクション(List<Car>などSet<Car>) を返す必要があります。
  2. 正確に等しい double を使用するのは悪い考えです。この質問の範囲外である可能性のある丸めやもののために、double値は常に期待どおりであると1.0は限りません(たとえば、常に意味する1.0とは限らない0.999999...、など)。整数を使用するか、Java で値を比較する方法についてこの回答(または同様のもの) を参照してください。double
于 2013-10-08T18:37:45.560 に答える
0

2 つの問題があります。1 つはメソッドから 1 つしか返せないこと、2は要求された位置にObjecta が見つかるとメソッドがすぐに返ることです。Car複数の車を印刷できるようにしたい場合は、返品タイプを確認し、いくつかの調整を行う必要があります。

代わりに、次のようにします。

public List<Car> find(double position){
List<Car> cars = new ArrayList<Car>();
for(Car d:cars){
    if(d.getPosition()==position){
        cars.add(d);
    }
}
return cars;
}

main()次に、次のように、返された各車を印刷するために、メソッドで反復処理を行う必要があります。

for(Car car : race.find(1.0))
{
    System.out.println(car.getName());
}
于 2013-10-08T18:35:40.813 に答える
0

Car戻り値の型を からに変更する必要がありますSet<Car>。その理由は、最初の車 (この場合はマツダ) を見つけたときに、次の行を実行するためreturn d;です。それはあなたの機能の終わりを意味します。あなたがする必要があるSet<Car>のは、関数でローカルにa を宣言するreturn dことです。Set.add(d);

于 2013-10-08T18:35:41.037 に答える