【问题标题】:An ArrayList that should have objects from a created class but print as null一个 ArrayList,它应该具有来自已创建类的对象但打印为 null
【发布时间】:2022-01-04 20:07:50
【问题描述】:

我的第一个类创建 ArrayList 并使用 Skill 对象填充它

import java.util.ArrayList;

public class Skill {
    String skillName;
    int skillValue;
    public static ArrayList<Skill> skillList = new ArrayList<Skill>();

    public Skill(String newSkillName, int newSkillValue){
        setSkillName(newSkillName);
        setSkillValue(newSkillValue);
    }

    public static void initializeSkillList(){
        //Creating the Skill obj's
        Skill str = new Skill("Str", 1);
        Skill dex = new Skill("Dex", 1);
        Skill intl = new Skill("Int", 1);
        Skill con = new Skill("Con", 3);

        //Adding them to the Skill ArrayList
        skillList.add(str);
        skillList.add(dex);
        skillList.add(intl);
        skillList.add(con);

        //Debug statement to check if the values are correct
        System.out.println(skillList.get(1).skillValue);
    }
}

我正在尝试从 Main.java 类中的 ArrayList 访问对象 SkillValue 和 SkillName。我有 setter 和 getter。 这是主类

import java.util.Scanner;

public class Main {
    static Character playerCharacter;
    static boolean charCreationComplete = false;
    static boolean endGame = false;
    static Scanner scnr = new Scanner(System.in);

    public static void main(String[] args){
        System.out.println("\n\nWelcome to Garterra!\n\n");
        Archetype.initializeArchetypeList();
        Skill.initializeSkillList();

        if (!charCreationComplete){
            charCreation(scnr);
            charCreationComplete = true;
        }

charCreation(scnr);然后通过getter和setter访问skillList

charCreation() 方法:

private static void charCreation(Scanner scnr){

    System.out.println("\nEnter player name:\n\n");
    String newName = scnr.nextLine();
    System.out.println("You Entered " + newName + " for your name!\n");
    System.out.println("Next, Choose your Archetype: 0 = Ranger\n");
    int archetypeIndex = scnr.nextInt();
    Character.currArchetype = Archetype.archetypeList.get(archetypeIndex);
    Character.archetypeName = Archetype.archetypeList.get(archetypeIndex).getArchetypeName();
    System.out.println("You have chosen " + Character.archetypeName + ".\nThis gives you " + Character.currArchetype.totalSpendableSkillPoints + " total spendable skill points!\n");
    System.out.println("Now, spend those skill points.\n");
    if (Character.currArchetype.getArchetypeName().contains("Ranger")){
        Ranger.dexModifierCalc(1);
        Ranger.conModifierCalc(1);
    }
    while (Character.currArchetype.totalSpendableSkillPoints > 0){
        System.out.println("How many points would you like to put into Strength?\nThis impacts your melee weapon damage and carry weight.\n");
        int strAddPoints = scnr.nextInt();
        Skill.skillList.get(0).setSkillValue(Skill.skillList.get(0).getSkillValue() + strAddPoints);
        Character.currArchetype.setTotalSpendableSkillPoints(Character.currArchetype.totalSpendableSkillPoints - strAddPoints);
        strAddPoints = 0;
        System.out.println("You now have " + Skill.skillList.get(0).getSkillValue() + "\n");
        if (Character.currArchetype.totalSpendableSkillPoints == 0){
            break;
        }
        if (Character.currArchetype.totalSpendableSkillPoints > 0){
            System.out.println("How many points would you like to put into Dexterity?\nThis impacts your ranged weapon damage.\n");
            int dexAddPoints = scnr.nextInt();
            Skill.skillList.get(1).setSkillValue(Skill.skillList.get(1).getSkillValue() + dexAddPoints);
            Character.currArchetype.setTotalSpendableSkillPoints(Character.currArchetype.totalSpendableSkillPoints - dexAddPoints);
            dexAddPoints = 0;
            System.out.println("You now have " + Skill.skillList.get(1).getSkillValue() + "\n");
        }
            if (Character.currArchetype.totalSpendableSkillPoints == 0){
            break;
        }
        if (Character.currArchetype.totalSpendableSkillPoints > 0){
            System.out.println("How many points would you like to put into Intelligence?\nThis impacts your magic damage.\n");
            int intAddPoints = scnr.nextInt();
            Skill.skillList.get(2).setSkillValue(Skill.skillList.get(2).getSkillValue() + intAddPoints);
            Character.currArchetype.setTotalSpendableSkillPoints(Character.currArchetype.totalSpendableSkillPoints - intAddPoints);
            intAddPoints = 0;
            System.out.println("You now have " + Skill.skillList.get(2).getSkillValue() + "\n");
        }
            if (Character.currArchetype.totalSpendableSkillPoints == 0){
            break;
        }
        if (Character.currArchetype.totalSpendableSkillPoints > 0){
            System.out.println("How many points would you like to put into Strength?\nThis impacts your melee weapon damage and carry weight.\n");
            int conAddPoints = scnr.nextInt();
            Skill.skillList.get(3).setSkillValue(Skill.skillList.get(3).getSkillValue() + conAddPoints);
            Character.currArchetype.setTotalSpendableSkillPoints(Character.currArchetype.totalSpendableSkillPoints - conAddPoints);
            conAddPoints = 0;
            System.out.println("You now have " + Skill.skillList.get(3).getSkillValue() + "\n");
        }
    }
    int newHealthPoints = Character.healthPointsCalc();
    System.out.println("You have " + newHealthPoints + " health points!\n\n");
    int newTotalCarryWeight = Character.carryWeightCalc(Character.currArchetype.getLevel());
    System.out.println("Your total carry weight is " + newTotalCarryWeight + ".\n");
    int newExperince = 0;
    playerCharacter = new Character(newName, newHealthPoints, newExperince, 1, Archetype.archetypeList.get(archetypeIndex), newTotalCarryWeight);
}

【问题讨论】:

  • 你首先需要在main()中创建一个对象,然后在那个对象上调用initializeSkillList()
  • 请包含charCreation的定义
  • 为什么在类中创建这些对象,为什么不在 main 中创建它们,然后在使用其构造函数创建新技能时命名每种类型的技能。在类“Skill”中创建一个列表“skillList”打破了 OOP 的整个概念。最好有另一个类 playerSkills 然后在那里有一个技能列表,这会更有意义
  • 我最初在不同的 Character 类中有 initializeSkillList() 方法和“skillList”列表,但它不起作用,所以我尝试移动它,但没有解决它,甚至打印语句该方法不打印正确的值,它只给出 null 或 0
  • 什么打印为null,哪一行?

标签: java arraylist


【解决方案1】:

如果你为“skillList”创建了一个getter,那么你可以说

Skill.getSkillList();

然后对这个列表做任何你想做的事情。 为了让你的代码更好一点,改变这个

public static ArrayList<Skill> skillList = new ArrayList<>();

到这里

public static List<Skill> skillList = new ArrayList<>();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多