繁体   English   中英

如何在Java方法中返回值

[英]how to return value in a method in Java

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

第三个值是position,这意味着mazda和honda具有相同的位置,应该同时打印两者,但是当我运行它时,它仅打印mazda,我很困惑,请指教,加油!

您只能从方法中返回一个值。 但是您可以返回一个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. 您只能从方法中返回一件事。 您的方法返回类型Car ,这意味着您将按字面意义返回一个 Car对象。 如果要返回多个,则需要返回一组汽车( Car[] )或一组汽车(例如List<Car>Set<Car>等)。
  2. 在完全相等的情况下使用double是个坏主意。 由于舍入和填充可能不在此问题的范围之内,因此double值可能并不总是完全符合您的期望(例如1.0可能并不总是意味着1.0 ,它可能是0.999999...等)。 您可以使用整数,也可以查看此答案 (或类似答案 )以了解如何在Java中比较double值。

两个问题: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());
}

您需要将返回类型从Car更改为Set<Car> 原因是,当您找到第一辆汽车(在本例中为mazda)时,将执行行return d; 这意味着功能已结束。 您需要做的是在函数中局部声明一个Set<Car> ,并在编写return d时编写Set.add(d);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM