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

Java 初始化存储在数组中的对象的变量 背景,java,arrays,loops,object,iteration,Java,Arrays,Loops,Object,Iteration,我已经声明了一个名为villainCharacteristics的2D数组。每一行代表一个不同的恶棍。 它由3列(整型)组成,分别表示HP、BulletDamage和FireWeakness的战斗值 类反派封装了这3个战斗变量,包括 设置器,以便为其分配值 我在尝试什么 我尝试使用for循环,以便将每一行的战斗值从阵列分配给不同的恶棍,因此我实例化了5个阵列行和5个恶棍对象 预期结果 为了澄清,一个例子是: 恶棍1应该有生命的 0,2的子弹伤害,1的火爆性 问题与代码 但是,当尝试打印这些值时,

我已经声明了一个名为
villainCharacteristics
的2D数组。每一行代表一个不同的恶棍。 它由3列(整型)组成,分别表示
HP
BulletDamage
FireWeakness
的战斗值

反派
封装了这3个战斗变量,包括
设置器,以便为其分配值

我在尝试什么 我尝试使用
for
循环,以便将每一行的战斗值从阵列分配给不同的恶棍,因此我实例化了5个阵列行和5个恶棍对象

预期结果 为了澄清,一个例子是:

恶棍
1
应该有生命的
0
2的子弹伤害
1的火爆性

问题与代码 但是,当尝试打印这些值时,它不起作用

    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;
    }


公共类WesternStory{
//设置每个反派的特征
公共静态void main(字符串[]参数){
int[][]村庄特征={{0,1,1},
{5,2,1},
{10,3,2},
{15,4,2},
{20,5,3}};
恶棍[]villainArray=新恶棍[5];//实例化了5个恶棍对象的数组
for(int i=0;i
所以你的问题就在这里:

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
是方法调用,因此您必须向它们传递一个由于所做声明而预期的参数,从而收到编译错误

尝试:


您无法实际调用“set”方法。例如,
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());
}
for(inti=0;i<5;i++){
villainArray[i].setHP(villainCharacteristics[i][0]);
villainArray[i].挫折伤害(villainArray特征[i][1]);
villainArray[i].setFireWeakness(villainArray特征[i][2]);
System.out.println(villainArray[0].getFireWeakness());
}
当您尝试使用
villain.setHP=7
设置它时,看起来您试图将类的
setHP
属性从一个方法更改为一个值,这当然不是您想要的。

编译错误 很遗憾,您没有回答,但很明显,对于以下行:

villainArray[i].setHP = villainCharacteristics[i][0];
使用java编译时,您收到以下错误:

无法解析符号“setHP”

这是因为Java编译器查找属性(属性、变量)符号
setHP
。查看类显示
setHP
不是属性的名称,而是一个方法(setter)。因此,为了成功编译,必须以不同的方式使用它(即称为方法)

如何使用setter setter是使用赋值作为参数的方法。Java方法在名称后使用括号调用,所有参数在括号内以逗号分隔

因此,您应该调用setter(即方法
setHP
)而不是
villainArray[i].setHP=villainCharacteristics[i][0];
调用setter(即方法
setHP
)并指定值(即
villainCharacteristics[i][0]
),如下所示:

villainArray[i].setHP(villainCharacteristics[i][0]);
如何使用getter getter也是返回属性(变量)值的方法。因此,这些方法只需用括号(不带参数)按名称调用即可

例如,要获取用于打印的值,应调用getter
getFireWeakness()

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

  System.out.println(villainArray[0].fireWeakness);
将无法打印,并出现编译错误:

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

这是因为只有通过publicgetter:
getFireWeakness()

另见
有关调用方法的语法是
variable.method(参数)的教程
.Not
variable.method=arguments
如果
不起作用
,你能解释一下你得到了什么错误消息吗?它编译了吗?还是有警告/错误?那么我们需要知道它们,以及类
恶棍的源代码
System.out.println(villainArray[0].getFireWeakness());
  System.out.println(villainArray[0].fireWeakness);