初始化存储在数组中的对象的变量

时间:2019-11-30 22:41:51

标签: java arrays loops object iteration

背景

我已经声明了一个名为villainCharacteristics的2D数组。每个 row 代表一个不同的反派。 它由 3列(整数类型)组成,代表HPBulletDamageFireWeakness的战斗值。

Villains封装了这3个战斗变量,并包括 设置器,以便为它们分配值。

我在尝试什么

我尝试使用for循环,以便将具有战斗值的每一行从数组分配给不同的小人,因此我实例化了5个数组行和5个小人对象。

预期结果

为澄清起见,示例如下:

  

反派1 ,其 HP 应为   02 bulletDamage 1 fireWeakness

问题和代码

但是,当尝试打印这些值时,它不起作用。

    public class WesternStory {

            //setting characteristics to each villain

            public static void main(String[] arguments) {
                int[][] villainCharacteristics = {{0,1,1}, 
                                                  {5,2,1},
                                                  {10,3,2},
                                                  {15,4,2},
                                                  {20,5,3}};


                Villains[] villainArray = new Villains[5]; //instantiated an array of 5 villain objects
                for(int i = 0; i < villainArray.length; i++){
                    villainArray[i] = new Villains();
                }


                for(int i = 0; i < 5; i++) { //initialises the different combat variables from the 2D array to each villain.
                    villainArray[i].setHP = villainCharacteristics[i][0]; //I get an error here
                    villainArray[i].setBulletDamage = villainCharacteristics[i][1]; //error
                    villainArray[i].setFireWeakness = villainCharacteristics[i][2]; //error

    System.out.println(villainArray[0].fireWeakness); //trying to print the value of fireWeakness within the first stored villain object.
                    }

Source code of Class Villains
public class Villains {
    //attacking variables: 
    private int hp;
    private int bulletDamage;
    private int fireWeakness;
    private int coins;

    //attack getters
    public int getHp(){
        return hp;
    }
    public int getBulletDamage(){
        return bulletDamage;
    }
    public int getFireWeakness(){
        return fireWeakness;
    }
    public int getCoins() {
        return coins;
    }


    //attack setters
    public void setHp(int hp){
        this.hp = hp;
    }
    public void setBulletDamage(int bulletDamage){
        this.bulletDamage = bulletDamage;
    }
    public void setFireWeakness(int fireWeakness){
        this.fireWeakness = fireWeakness;
    }


3 个答案:

答案 0 :(得分:0)

所以您的问题在那里:

villainArray[i].setHP = villainCharacteristics[i][0]; //I get an error here
villainArray[i].setBulletDamage = villainCharacteristics[i][1]; //error
villainArray[i].setFireWeakness = villainCharacteristics[i][2]; //error

setBulletDamage setFireWeakness是方法调用,因此您必须向其传递由于您进行的声明而期望的参数,从而收到编译错误。

尝试:

villainArray[i].setHP = villainCharacteristics[i][0]; 
villainArray[i].setBulletDamage(villainCharacteristics[i][1]); 
villainArray[i].setFireWeakness(villainCharacteristics[i][2]);

答案 1 :(得分:0)

您实际上无法调用您的“设置”方法。例如,Villains.setHP是一个函数,而不是属性,因此您必须像在villain.setHP(7)中那样使用参数来调用它。以下是for循环的外观:

for(int i = 0; i < 5; i++) { 
  villainArray[i].setHP(villainCharacteristics[i][0]); 
  villainArray[i].setBulletDamage(villainCharacteristics[i][1]);
  villainArray[i].setFireWeakness(villainCharacteristics[i][2]); 
  System.out.println(villainArray[0].getFireWeakness());
}

当您尝试使用villain.setHP = 7进行设置时,您似乎正在尝试将类的setHP属性从方法更改为值,这当然不是您想要的

答案 2 :(得分:0)

编译错误

很遗憾,您没有回答,但是很明显,对于以下行:

villainArray[i].setHP = villainCharacteristics[i][0];

使用Java编译时,出现以下错误:

  

无法解析符号“ setHP”

这是因为Java编译器正在寻找属性(属性,变量)符号setHP。查看类显示setHP不是属性的名称,而是方法(设置器)。因此,必须以不同的方式使用它(即称为方法)才能成功编译。

如何使用设置器

设定者是方法,使用该值将其分配为参数。在Java方法的名称后使用括号调用Java方法,并将所有参数以逗号分隔的形式传递到这些括号中。

因此,您应该调用setter(即方法villainArray[i].setHP = villainCharacteristics[i][0];),而不是setHP,这样的话要使用要赋值的值(即villainCharacteristics[i][0]),如下所示:

villainArray[i].setHP(villainCharacteristics[i][0]);

如何使用吸气剂

Getters也是返回属性值(变量)的方法。因此,这些方法可以简单地通过名称加上括号(不带参数)来调用。

例如,要取回打印值,则应调用getter getFireWeakness()

System.out.println(villainArray[0].getFireWeakness());

您在循环内发布的代码行:

  System.out.println(villainArray[0].fireWeakness);

将打印失败,并显示编译错误:

  

“ fireWeakness”在“恶棍”中具有私人访问权限

这是因为只允许 public getter:getFireWeakness()

尝试直接访问 private 属性(变量)。

另请参见

Java Encapsulation and Getters and Setters上的教程