Инициализация переменной объекта, хранящегося в массиве - PullRequest
0 голосов
/ 01 декабря 2019

Фон

Я объявил двумерный массив с именем villainCharacteristics. Каждая строка представляет отдельного злодея. Он состоит из 3 столбцов (типа integer), представляющих боевые значения для HP, BulletDamage и FireWeakness.

Класс Villains инкапсулирует эти 3 боевые переменные и включает в себясеттеры для присвоения им значений.

Что я пытаюсь

Я попытался использовать цикл for, чтобы присвоить каждой строке с боевыми значениями из массива другого злодея, отсюда 5 строк массива и 5 объектов злодеяЯ создал.

Ожидаемый результат

Для пояснения, пример будет:

Злодей 1, который должен иметь HP из 0, bulletDamage из 2 и fireWeakness из 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;
    }


1 Ответ

0 голосов
/ 01 декабря 2019

Итак, ваша проблема здесь:

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]);

...