使用助手 类 引用创建的对象
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。
大家一月快乐,
最近我一直在从头学习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。