我使用数组语句创建了一个数字对象,我可以在创建时打印类中传递的值,但是当我尝试从类外部(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");
}
由于
答案 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
代替property
和MonopolyGame
代替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
实例,每个实例具有不同的地址。由于此问题看起来像是家庭作业,请将其标记为。