我已经声明了一个名为villainCharacteristics
的2D数组。每个 row 代表一个不同的反派。
它由 3列(整数类型)组成,代表HP
,BulletDamage
和FireWeakness
的战斗值。
类Villains
封装了这3个战斗变量,并包括
设置器,以便为它们分配值。
我尝试使用for
循环,以便将具有战斗值的每一行从数组分配给不同的小人,因此我实例化了5个数组行和5个小人对象。
为澄清起见,示例如下:
反派
1
,其 HP 应为0
,2
的 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;
}
答案 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()