访问对象数组项,java

访问对象数组项,java,java,Java,我已经使用数组语句创建了许多对象,我可以在创建类时打印在类中传递的值,但是当我尝试从类(monopolygame类)外部检索元素值时,它无法识别引用-我如何才能正确引用它 public class monopolygame { public static void main(String[] args) { //set up array of 18 objects property properties[] = new property[18]

我已经使用数组语句创建了许多对象,我可以在创建类时打印在类中传递的值,但是当我尝试从类(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");
}

谢谢

您必须首先在“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方法范围之外访问它,您应该声明为
属性或
实例
属性,如下所示:

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")
会有用的

顺便说一句,在Java中,按照惯例,所有类名都以大写开头,因此应该是:

Property
代替
Property
MonopolyGame
代替
MonopolyGame
几句话:

  • 在Java中,字符串比较需要 使用
    equals()
    方法完成,而不是 ==. 有关为什么在某些情况下使用==可能有效的解释,请参见,但这不应该是预期的

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

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


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


但一般来说,您的代码不是用Java做事情的正确方法。例如,类名必须大写。第二个类中的空main是没有意义的。您需要了解更多关于Java的基本知识,我回答您的问题是因为我认为您可以在这里学到很多东西,但我建议您检查涵盖Java基础知识的跟踪。

鉴于您提供给我们的代码,看起来您实际上并没有存储传递给属性构造函数的值。这里有一些更接近您的属性类的外观:

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

    }
}

两个问题显而易见:

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

由于这个问题看起来像是家庭作业,请贴上这样的标签。

你能贴出什么不起作用(我的意思是你是如何尝试使用它的?)问题到底是什么?如果您有一些代码没有编译,那么请显示这些代码。否则,就不清楚你到底想做什么。很好的答案。。。现在我将停止键入:-)“类名必须大写”-不是真的-这是一种惯例,同时使变量名以小写字母开头,这使得区分两者变得很容易。谢谢-这让我走上了正确的轨道-我理解为什么它现在不起作用,其他注释也非常有用,我对java还很陌生,所以要掌握一些概念等等!