0

我有一个关于在 main 方法中调用方法时如何返回值的问题,这是我的部分代码:

 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());

第三个值是位置,意思是mazda和honda的位置是一样的,应该都打印出来,但是我运行的时候,它只打印mazda,我很困惑,请指教,加油!

4

4 回答 4

3

一个方法只能返回一个值。但是你可以返回一个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. 您只能从方法中返回一件事。您的方法返回 type Car,这意味着您将按字面意思返回一个 Car对象。如果要返回多个,则需要返回汽车数组 ( Car[]) 或汽车集合(例如List<Car>Set<Car>等)。
  2. 使用完全相等的双打是个坏主意。由于四舍五入和可能超出此问题范围的内容,double值可能并不总是您所期望的(例如,1.0可能并不总是意味着1.0,它可能是0.999999...等)。要么使用整数,要么查看这个关于如何double在 Java 中比较值的答案(或类似答案)。
于 2013-10-08T18:37:45.560 回答
0

两个问题:1,你只能Object从一个方法返回一个,2,当你的方法Car在请求的位置找到 a 时,它会立即返回。如果您希望能够打印不止一辆汽车,您需要查看您的退货类型并进行一些调整。

相反,请执行以下操作:

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

您需要将返回类型从 更改CarSet<Car>。原因是当你找到第一辆车(在本例中是马自达)时,你执行了 line return d;。这意味着它的功能结束。你需要做的是Set<Car>在函数中声明一个本地,而return d不是写你写Set.add(d);

于 2013-10-08T18:35:41.037 回答