4 回答
TA贡献1852条经验 获得超1个赞
当你定义
private void continueRound1 (ActionEvent event){
ROCK round1Rock= new ROCK( 500, 100, 100, 100, "Metamorphic");
}
您ROCK round1Rock只是为函数定义continueRound1。要Attack访问该对象,您需要round1Rock在类级别上进行定义。
尝试:
ROCK round1Rock = null;
private void continueRound1 (ActionEvent event){
round1Rock= new ROCK( 500, 100, 100, 100, "Metamorphic");
}
private void Attack (ActionEvent event){
round1Rock.hp = 12;
}
TA贡献1865条经验 获得超7个赞
在类级别定义round1Rock,
class someclass
{
private ROCK round1Rock;
-----
private void continueRound1 (ActionEvent event){
round1Rock= new ROCK( 500, 100, 100, 100, "Metamorphic");
}
private void Attack (ActionEvent event){
round1Rock.hp = 12;
}
------
}
TA贡献1865条经验 获得超7个赞
而不是在 continueRound1 方法中创建一个新的 Rock 对象。您可以在类范围内创建新的 Rock 对象并设置私有访问。这将解决您的问题。
附加提示:每次单击按钮时,您都会创建一个新对象。如果我编写程序无限期地单击按钮,这将导致OutOfMemoryError 。
以下是我避免此问题的见解:
我假设每个客户都需要新的摇滚乐。因此,在客户端类中创建一个 Empty Rock 对象。
在您的客户端构造函数中,您可以使用岩石类型的默认值初始化岩石对象。getDefaultRockForType 将帮助您创建任意数量的岩石类型。因此,我们将客户端类中带有一些值的 Rock 对象的实现细节隐藏为 Rock 类中的标准化值。
这是我的代码片段:
Class Client {
private Rock round1Rock = new Rock();
Client() {
round1Rock = round1Rock.getDefaultRockForType("Metamorphic");
}
private void continueRound1 (ActionEvent event){
round1Rock= round1Rock.getDefaultRockForType("Metamorphic");
}
private void Attack (ActionEvent event){
round1Rock.setHp(12);
}
}
在您的 Rock 类中,您可以提供由您的岩石类型决定的默认值。
类摇滚:
public Rock getDefaultRockForType(String type){
if(type.equals("Metamorphic")){
this.hp=500;
this.stamina= 100;
this.attack= 100;
this.speed = 100;
this.type = type;
}
}
TA贡献1790条经验 获得超9个赞
首先像这样声明 ROCK 的实例是全局的
private ROCK round1Rock = null;
private void continueRound1 (ActionEvent event){
round1Rock= new ROCK( 500, 100, 100, 100, "Metamorphic");
}
private void Attack (ActionEvent event){
round1Rock.hp = 12;
}
在您的 Attack 动作侦听器中,您可能无法访问变量 hp,因为它可能是私有的,因此最好为 Rock 类创建 setter 和 getter 方法,然后使用它。
摇滚类:
public ROCK(int hp, int stamina, int attack, int speed, String type){
this.hp=hp;
this.stamina= stamina;
this.attack= attack;
this.speed = speed;
this.type = type;
}
public void setHP(int hp){
this.hp = hp
}
public void getHP(){
return hp;
}
然后在你的其他班级使用这个:
private void Attack (ActionEvent event){
round1Rock.setHP(12); //this will update the value
}
添加回答
举报