访问对象数组项,java
我已经使用数组语句创建了许多对象,我可以在创建类时打印在类中传递的值,但是当我尝试从类(monopolygame类)外部检索元素值时,它无法识别引用-我如何才能正确引用它访问对象数组项,java,java,Java,我已经使用数组语句创建了许多对象,我可以在创建类时打印在类中传递的值,但是当我尝试从类(monopolygame类)外部检索元素值时,它无法识别引用-我如何才能正确引用它 public class monopolygame { public static void main(String[] args) { //set up array of 18 objects property properties[] = new property[18]
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()
- 将类名->属性而不是属性大写是一种惯例 财产
- 避免混合和匹配支架定位。在同一行的末尾或下一行的开头使用,但不能同时使用。最频繁的使用是在同一行的末尾
但一般来说,您的代码不是用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还很陌生,所以要掌握一些概念等等!