【问题标题】:how to return value in a method in Java如何在Java中的方法中返回值
【发布时间】:2013-10-15 20:08:07
【问题描述】:

我有一个问题,关于在 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,很迷茫,请指教,加油!

【问题讨论】:

  • 附带说明,您不应该使用d.getPosition()==position,因为浮点数的精度有限,无法像那样进行比较。要么使用整数,要么使用Math.abs(d.getPosition()-position) &lt; 0.000001
  • 返回一个集合或将其作为参数传递给方法

标签: java class return


【解决方案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());

【讨论】:

  • 您好,我尝试了您的解决方案,但我应该如何在 main() 方法中写入 System.out.println,我的旧方法不适用于您的解决方案,getName() 方法不起作用
【解决方案2】:

这里有几件事:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 个人认为在这种情况下 List 比 Set 更好
    【解决方案4】:

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

    【讨论】:

    • 您好,我尝试了您的解决方案,但我应该如何在 main() 方法中写入 System.out.println,我的旧方法不适用于您的解决方案,getName() 方法不起作用
    • 正如我所说,您需要在 main() 方法中进行一些迭代,以打印出每辆返回的汽车。
    • @peiwang 那里我什至给你举了一个例子
    • 谢谢,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2015-05-13
    • 2023-01-07
    • 2014-02-28
    • 2023-03-29
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多