如何在Java中的方法中返回值

时间:2013-10-08 18:32:16

标签: java class return

我得到一个关于在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());

第三个值是位置,这意味着马自达和本田有相同的位置,它应该打印两者,但是当我运行它,它只打印马自达,我很困惑,请建议,欢呼!

4 个答案:

答案 0 :(得分: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());

答案 1 :(得分:2)

这里有几件事:

  1. 您只能从方法中返回一件事。您的方法返回类型Car,这意味着您将返回一个 Car对象。如果您想要返回多个,则需要返回一系列汽车(Car[])或一组汽车(例如List<Car>Set<Car>等)。
  2. 使用具有完全相等的双精度是一个坏主意。由于四舍五入和可能超出此问题范围的内容,double值可能并不总是您所期望的(例如1.0可能并不总是意味着1.0,它可能是0.999999...等。要么使用整数,要么参考this answer(或类似)关于如何比较Java中的double值。

答案 2 :(得分:0)

两个问题:1,您只能从方法中返回一个Object,而2,当您在请求的位置找到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());
}

答案 3 :(得分:0)

您需要将退货类型从Car更改为Set<Car>。原因是当你找到第一辆汽车(在这种情况下是马自达)时,你执行了行return d;。这意味着它的功能结束了。你需要做的是在函数中本地声明Set<Car>,并写下return dSet.add(d);

的内容