为了账号安全,请及时绑定邮箱和手机立即绑定

如何访问由构造函数生成的对象变量

如何访问由构造函数生成的对象变量

米琪卡哇伊 2022-10-12 15:29:40
我有 2 个按钮,1 个使用 round1rock 中的构造函数类,而其他 1 个尝试访问这些参数。我的代码有什么问题?构造函数类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;}2个按钮:private void continueRound1 (ActionEvent event){       ROCK round1Rock= new ROCK( 500, 100, 100, 100, "Metamorphic");    }    private void Attack (ActionEvent event){        round1Rock.hp = 12;    }我如何访问以前制作的对象?
查看完整描述

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;


}


查看完整回答
反对 回复 2022-10-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;


    }


           ------

}


查看完整回答
反对 回复 2022-10-12
?
莫回无

TA贡献1865条经验 获得超7个赞

而不是在 continueRound1 方法中创建一个新的 Rock 对象。您可以在类范围内创建新的 Rock 对象并设置私有访问。这将解决您的问题。

附加提示:每次单击按钮时,您都会创建一个新对象。如果我编写程序无限期地单击按钮,这将导致OutOfMemoryError 。

以下是我避免此问题的见解:

  1. 我假设每个客户都需要新的摇滚乐。因此,在客户端类中创建一个 Empty Rock 对象。

  2. 在您的客户端构造函数中,您可以使用岩石类型的默认值初始化岩石对象。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;

   }

}


查看完整回答
反对 回复 2022-10-12
?
富国沪深

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


  }


查看完整回答
反对 回复 2022-10-12
  • 4 回答
  • 0 关注
  • 115 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信