2009-11-26 78 views
2

我已創建使用陣列語句多個對象,我可以調用println,因爲它是創建的類內傳遞的值,但是當我嘗試和從類的外部檢索元素值( monopolygame類)它不承認refrence - 我怎麼才能正確引用?訪問對象數組項,JAVA

public class monopolygame { 

    public static void main(String[] args) { 

     //set up array of 18 objects  
     property properties[] = new property[18]; 

     //create 18 property objects and populate array 
     properties[0] = new property("a","available",400,500);//create property 
     properties[1] = new property("b","available",400,500);//create property 
     properties[2] = new property("c","available",200,300);//create property 
     properties[3] = new property("d","available",100,180);//create property 
     properties[4] = new property("e","available",400,700);//create property 
    } 
} 

財產類...

public class property 
{ 
    public static void main(String[] args) 
    { 
    } 

    //constructor 
    public property(String propertyname, String owner, double price, double rent) 
    { 
     System.out.println("Property info for " + propertyname 
          + " - Rent : £" + rent 
          + "Price : £" + price 
          + "owned by :" + owner); 
    } 
} 

我使用這種在壟斷類的引用,試圖訪問數據

if (properties[2].propertyname == "available") 
{ 
    System.out.println("avaialble"); 
} 
else 
{ 
    System.out.println("sold"); 
} 

感謝

+0

你可以發佈什麼是**不**工作(我的意思是你怎麼嘗試使用它?) – OscarRyz 2009-11-26 00:54:58

+0

究竟是什麼問題?如果它是你編譯的代碼,那麼請顯示該代碼。否則,目前還不清楚你實際上想要做什麼。 – 2009-11-26 00:55:07

回答

2

鑑於你提供給我們的代碼,它看起來並不像你實際存儲傳遞給你的屬性構造函數的值。這裏的東西有點接近你的財產類應該是什麼樣子:

public class property 
{ 
    private String propertyname; 
    private String owner; 
    private double price; 
    private double rent; 

    public String getPropertyName() 
    { 
     return propertyname; 
    } 

    public void setPropertyName(string newName) 
    { 
     propertyname = newName; 
    } 

    // more getter/setter methods here 

    public property(String propertyname, String owner, double price, double rent)//constructor 
    { 
     this.propertyname = propertyname; 
     this.owner = owner; 
     this.price = price; 
     this.rent = rent; 

     System.out.println("Property info for " + propertyname + " - Rent : £" + rent + "Price : £" + price + "owned by :" + owner); 

    } 
} 
+0

感謝 - 這讓我走上了正軌 - 我明白爲什麼它現在不工作,其他評論也很有幫助,我對Java很陌生,所以要抓住這些概念等等! – ivor 2009-11-26 01:15:24

3

你有首先在「屬性」類中聲明這些屬性:

class property { 
    String propertyname; 
    String owner; 
    int price; 
    int rent; 
    public Property(String somename, String owner, int price, int rent) { 
     this.propertyname = somename; 
     this.owner = owner; 
     this.price = price; 
     this.rent = rent; 
     // and so on 
     } 
} 

您正在使用的陣列是本地的主要方法。

要訪問它的主要方法的範圍外,你應該聲明或者作爲class屬性或作爲instance屬性是這樣的:

public class monopolygame { 
    public static property properties[]; 
    public static void main(String[] args) { 
    //set up array of 18 objects 

    properties = new property[18]; 
    ..... 

這種方式可以在像這樣的其他方法訪問陣列:

​​

那麼你的代碼:

if (properties[2].propertyname == "available") 

將工作。

BTW在Java中所有的類名按照慣例大寫字母開始,所以它應該是:

Property代替propertyMonopolyGame代替monopolygame

+0

優秀的答案...我現在不再打字了:-) – 2009-11-26 01:06:14

1

一個幾句話:

  • 在Java中,字符串比較需要 將與equals()方法,而不是 ==完成。請參閱this link瞭解爲什麼在某些情況下使用==可能會起作用,但這不應該是預期的。

  • 它是利用類名的約定 - >屬性,而不是 財產。

  • 避免混合和匹配托架的定位。在同一行的末尾或下一行的開頭使用,但不能同時使用。最常見的用途是在同一行的末尾。

+0

歡呼聲 - 只要閱讀鏈接。 – ivor 2009-11-26 13:37:20

0

您需要添加一個公共方法來訪問monopolygame類的內部。這是你問題的主要方面。

但總的來說你的代碼是不是在Java中做事的正確方法。例如,類名必須大寫。第二課中的空主是毫無意義的。您需要了解更多關於基本Java的內容,我回答您的問題,因爲我認爲您可以在這裏學到很多東西,但我建議您檢查一下涵蓋基本內容的路徑The Java Tutorial

+0

「類名必須大寫」 - 不正確 - 這是一個約定,同時使變量名以小寫字母開頭,這樣可以很容易地區分這兩個字母。 – 2009-11-26 01:07:46

0

兩個問題顯而易見:

  • 你不能存儲傳遞給property構造函數的參數中的字段類中。
  • 一旦你這樣做,你試圖通過值(通過String#equals(String))參照比較字符串(或通過身份,通過==),而不是。除非被屏蔽字符串通過String#intern(),否則具有相同字符內容的兩個不同String實例將不會通過==進行比較。該比較僅查看對象引用的內存地址,這很可能指向兩個不同的 String實例,每個實例都具有不同的地址。

由於這個問題看起來像一個家庭作業,請標記爲這樣。