2013-10-08 23 views
0

我得到了什麼時候在main方法調用的方法如何返回值的問題,這是我的部分代碼:如何在方法的返回值在Java中

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

第三值是位置,這意味着馬自達和本田具有相同的位置,它應該同時打印,但是當我運行它,它只能打印馬自達,我很困惑,請指教,乾杯!

+1

在附註中,你不應該'd。getPosition()=='位置,因爲浮點數的精度有限,不能像這樣進行比較。要麼使用整數,要麼執行'Math.abs(d.getPosition() - position)<0.000001'之類的操作。 –

+0

返回一個集合或將其作爲參數傳遞給方法 – 2013-10-08 18:39:05

回答

2

幾件事情在這裏:

  1. 只能從方法返回的一件事。您的方法返回類型Car,這意味着您將從字面上返回一個Car對象。如果您想返回多個車輛,則需要返回一系列車輛(Car[])或一組車輛(例如List<Car>,Set<Car>等)。
  2. 使用雙精度平等是一個壞主意。由於四捨五入和可能超出此問題範圍的內容,因此double值可能並不總是完全符合您的預期(例如,1.0可能並不總是意味着1.0,它可能是0.999999...等)。要麼使用整數,要麼參見this answer(或類似的)關於如何比較Java中的double值。
+0

謝謝喬納森! –

3

您只能從方法返回一個值。但是你可以返回List:如果你想每一個在單獨一行

[mazda, toyota] 

,則需要遍歷:

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; 
} 

如果這是你做的,你會得到這樣的輸出列表中main和打印每一個:

for (Car c : race.find(1.0)) 
    System.out.println(c.getName()); 
+0

您好我嘗試了您的解決方案,但是我應該如何在main()方法中使用System.out.println,我的舊方法不能使用您的解決方案,getName( )方法不起作用 –

+0

@peiwang我編輯了一個解決方案。 – tbodt

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()); 
} 
+0

嗨我試過你的解決方案,但我應該如何在main()方法中使用System.out.println,我的舊方法並不適用於你的解決方案,getName()方法不起作用 –

+0

正如我所說,你會需要在你的'main()'方法中做一些迭代以打印出每輛返回的汽車。 – StormeHawke

+0

@peiwang我甚至給你舉個例子怎麼做 – StormeHawke

0

您需要將您的退貨類型從Car更改爲Set<Car>。原因是當你找到第一輛汽車(在這裏是馬自達)時,你執行行return d;。這意味着它是你的功能的結束。你需要做的是在函數聲明Set<Car>本地和這一翻譯寫作return d你寫Set.add(d);

+0

個人會認爲列表將是一個更好的選擇比在這種情況下設置 – StormeHawke