使用助手 类 引用创建的对象

Referencing created objects with helper classes

大家一月快乐,

最近我一直在从头学习Java。这真的很有趣。我已经开始创建一个基本的角色扮演游戏,用户可以在其中选择和属性以及用户是想成为战士还是法师。美好时光。

在我的主 class 中,我现在有了这个新的英雄对象,它存储了用户输入的所需属性以及他们是否想成为战士或法师。现在我想创建其他 classes 来引用新创建的具有存储变量的对象。我完全迷路了。

因为我不想粘贴大量令人尴尬的蹩脚代码,所以我将使用一个非常简单的示例:

这是第一个 class 用户告诉我们他的英雄有多少力量的地方:

import java.util.Scanner;

public class HeroCreation
{
    int strength;
    Scanner input = new Scanner(System.in);

    public void setStr()
    {
        System.out.println("Please tell Whosebug how much strength you want: ");
        strength = input.nextInt();
        System.out.println("Your strength is: " + strength + "!");
    }

}

这是运行此方法的主要 class:

public class MainClass
{
    public static void main(String args[])
    {
        HeroCreation hero1 = new HeroCreation();
        hero1.setStr();

        //Here is where I want to reference another class that refers to this new hero...

    }
}

这就是我卡住的地方。我有这个新英雄。这个英雄有10点力量。我如何在其他助手 classes 中引用所述英雄?从概念上讲,我是不是想错了?

感谢您的宝贵时间和专业知识!

一种选择是将数据保存在某个地方,无论是数据库还是文件。

或者创建您要使用的第二个 class 的实例,只需将 hero1 传递给相关方法即可。

通常当我们谈论帮助程序 classes 时,我们指的是使用静态工厂方法的 classes,因此它们不必被初始化。

根据你的问题和评论,我认为你的意思是这样的:

public static class MyHelperClass {

    public static void DoSomethingWithHeroStrength(HeroCreation hero)
    {
        int strength = hero.getStrength();
        // ...
    }
}

兄弟,你连个Hero都没有,你只有一个HeroCreation

为您提供几个基本的面向对象分析和设计概念:

  • 作为起始设计规则,您应该为问题 space 中的每个名词创建一个 class,或者至少是一个变量,并且您应该创建问题中每个动词的方法 space.

  • 编写新代码时,首先想到的是"what class is responsible for this"?将责任委派给正确的 class 对于保持代码易于理解和扩展非常重要。通常一个新的职责不属于任何现有的 class,所以你必须添加一个新的 class.

利用这两个规则,这里是我将如何编写您目前拥有的代码的起始版本。

Hero.java

public class Hero
{
    private int strength;
    private int intelligence;
    // other attributes

    public int getStrength() {
        return this.strength;
    }

    public void setStrength(int strength) {
        this.strength = strength;
    }

    public int getIntelligence() {
        return this.intelligence;
    }

    public void setIntelligence(int intelligence) {
        this.intelligence = intelligence;
    }

    // other "accessor" (get and set) methods for attributes
}

HeroCreation.java

import java.util.Scanner;

public class HeroCreation
{
    Scanner input = new Scanner(System.in);

    public int askStrength() {
        return askIntegerAttribute("strength");
    }

    public int askIntelligence() {
        return askIntegerAttribute("intelligence");
    }

    // ask other attribute values

    private int askIntegerAttribute(String attribute) {
        System.out.println("How much " + attribute + " do you want? ");
        int value = input.nextInt();
        System.out.println("Your " + attribute + " is: " + value + "!");
        return value;
    }
}

Main.java

public class Main
{
    public static void main(String args[])
    {
        HeroCreation creation = new HeroCreation();

        Hero hero1 = new Hero();
        hero1.setStrength(creation.askStrength());
        hero1.setIntelligence(creation.askIntelligence());

        Hero hero2 = new Hero();
        hero2.setStrength(creation.askStrength());
        hero2.setIntelligence(creation.askIntelligence());

    }
}

现在您将继续向这些 class 添加符合其定义职责的变量和方法。您将继续为遇到的其他职责创建其他 classes。