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也是返回属性(变量)值的方法。因此,这些方法只需用括号(不带参数)按名称调用即可
例如,要获取用于打印的值,应调用gettergetFireWeakness()
:
您在循环中发布的代码行:
System.out.println(villainArray[0].fireWeakness);
将无法打印,并出现编译错误:
“fireWeakness”在“恶棍”中具有私人访问权限
这是因为只有通过publicgetter:getFireWeakness()
另见
有关调用方法的语法是variable.method(参数)的教程
.Notvariable.method=arguments
如果不起作用
,你能解释一下你得到了什么错误消息吗?它编译了吗?还是有警告/错误?那么我们需要知道它们,以及类恶棍的源代码
System.out.println(villainArray[0].getFireWeakness());
System.out.println(villainArray[0].fireWeakness);