2017-05-29 65 views
-3

對不起,我真的不知道如何解釋我的問題。類別列表中的訪問方法

比方說,我有兩個clases,第一個汽車(不包括獲取並設置中的例子)

public class Car{ 
    int id; 
    string model; 
    ArrayList<Specs> ListSpecs = new ArrayList<Specs>(); 
} 

第二個,規格,包含了汽車的進一步詳情

public class Specs{ 
    float kilometers; 
    float passangers; 
    public float km_pass(float a, float b){ 
      return this.a/this.b; 
     } 
} 

現在我的主要問題是,我怎樣才能從一個對象類型汽車訪問變量km_pass?嘗試像

Example Car = new Car(); 
Car.setId(123); 
Car.setModel("Abc"); 
ListDetails Specs = new Specs(); 
Car.SetSpecs(ListDetails); 

Car.SetSpecs.SetKilometers(123); //wont work 

我的例子是否足夠清楚?

謝謝!

+1

給類getter/setter方法 –

+0

它是一個列表,所以你必須指定一個索引。 – ElDuderino

+0

即使我有一個方法在類Specs SetKilometers中,正如cde中所說(getter和setter不包括在內)示例wnt工作的最後一行,你能舉個例子說明我該怎麼做嗎? –

回答

1

你正在處理一個列表,重要的是要注意列表是一個完全不同於它所包含的對象。

我想你正在考慮列表作爲菜單的(打印)頁面,如果你想改變一個項目,你必須改變整個頁面,這是不正確的。如果你想改變內部的物體,你可以把這個列表看作一個內閣,你不會改變整個內閣,只是抽屜裏的物品。


這如何適用於您的情況: 名單,應該是內閣。

規格,應在抽屜裏面的物品(列表中的每個位置是抽屜)

如果您setSpecs方法是這樣的:

void setSpecs (List<Spec> specs) { 
    this.listSpecs = specs; 
} 

這意味着每次調用setSpecs你實際上正在改變整個內閣。

很可能要添加一個規範的,相反,它會是這個樣子:

void addSpec (Spec spec) { 
    this.listSpecs.add(spec); 
} 

而得到從列表中規範會是這樣的:

// think of index as the number of the drawer where the spec is stored. 
Spec getSpec (int index) { 
    // actually gets the spec from the list 
    return this.listSpecs.get(index) 
} 

和例如:

// Create a new car 
Car car = new Car(); 
// Configures the car 
car.setId(123); 
car.setModel("Abc"); 
// Create a new spec 
Spec spec = new Spec(); 
// Configures the spec 
spec.setKilometers(123); 
// Adds spec to the car's list 
car.addSpec(spec); 
// gets the first spec of the list 
Spec firstSpec = car.getSpec(0); 
+0

Mhh我認爲這幫助我完全想要我想要的東西!非常感謝您花花公子:) –