访问对象数组项java

时间:2009-11-26 00:52:06

标签: java

我使用数组语句创建了一个数字对象,我可以在创建时打印类中传递的值,但是当我尝试从类外部(monopolygame类)检索元素值时,它不会认识到参考 - 我怎样才能正确地反思这一点?

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

由于

5 个答案:

答案 0 :(得分:3)

您必须首先在“property”类中声明这些属性:

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

您使用的数组是main方法的本地数组。

要在main方法范围之外访问它,您应该声明为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];
    .....

这样你就可以用其他方法访问数组:

    public void setUp() {
         for( property p : properties ) {
             System.out.println( p.propertyname ); // etc. 

然后你的代码:

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

会工作吗?

BT中的BTW所有类名都按惯例以大写开头,所以它应该是:

Property代替propertyMonopolyGame代替monopolygame

答案 1 :(得分: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);

    }
}

答案 2 :(得分:1)

一些评论:

  • 在Java中,字符串比较需要 用equals()方法完成,而不是 ==。有关使用==在某些情况下可能有效的原因的说明,请参阅this link,但不应该这样做。

  • 将类名称大写是一种惯例 - >财产而不是 属性。

  • 避免混合和匹配支架定位。在同一行的末尾或下一行的开头使用,但不能同时使用两者。最常用的是在同一行的末尾。

答案 3 :(得分:0)

您需要添加一个公共方法来访问monopolygame类的内部。这是你问题的主要方面。

但总的来说,你的代码不是用Java做事的正确方法。例如,类名必须大写。第二类中的空主是没有意义的。您需要了解有关基本Java内容的更多信息,我回答您的问题,因为我认为您可以在这里学到很多东西,但我建议您查看涵盖The Java Tutorial基础知识的小径。

答案 4 :(得分:0)

两个问题显而易见:

  • 您不会将传递给property构造函数的参数存储在该类的字段中。
  • 一旦你这样做,你就试图通过引用(或通过身份,通过==)而不是按值来比较字符串 (通过String#equals(String))。除非您通过String#intern() 实施字符串,否则具有相同字符内容的两个String个实例将不会通过==进行比较。该比较仅查看对象引用的内存地址,这很可能指向两个不同的 String实例,每个实例具有不同的地址。

由于此问题看起来像是家庭作业,请将其标记为。