Java—寻找编写类方法的更有效方法
我正在创建一个自动创建玩家角色的程序。下面是我的Java—寻找编写类方法的更有效方法,java,class,performance,Java,Class,Performance,我正在创建一个自动创建玩家角色的程序。下面是我的PlayerCharacter类。我注意到我对不同的变量重复了许多操作 public class PlayerCharacter { int strength, dexterity, constitution, intelligence, wisdom, charisma; int[] strRolls, dexRolls, conRolls, intRolls, wisRolls, charRolls; public
PlayerCharacter
类。我注意到我对不同的变量重复了许多操作
public class PlayerCharacter {
int strength, dexterity, constitution, intelligence, wisdom, charisma;
int[] strRolls, dexRolls, conRolls, intRolls, wisRolls, charRolls;
public void generateAbilityScoresMethod1() {
strRolls = new int[3];
dexRolls = new int[3];
conRolls = new int[3];
intRolls = new int[3];
wisRolls = new int[3];
charRolls = new int[3];
for(int i = 0; i < 3; i++) {
strRolls[i] = dice.Dice.D6.getNewRoll();
strength += strRolls[i];
dexRolls[i] = dice.Dice.D6.getNewRoll();
dexterity += dexRolls[i];
conRolls[i] = dice.Dice.D6.getNewRoll();
constitution += conRolls[i];
intRolls[i] = dice.Dice.D6.getNewRoll();
intelligence += intRolls[i];
wisRolls[i] = dice.Dice.D6.getNewRoll();
wisdom += wisRolls[i];
charRolls[i] = dice.Dice.D6.getNewRoll();
charisma += charRolls[i];
}
}
public int getStrength() {
return strength;
}
public void printStrRolls() {
System.out.println("Str: roll 1 = " + strRolls[0]);
System.out.println("Str: roll 2 = " + strRolls[1]);
System.out.println("Str: roll 3 = " + strRolls[2]);
}
public int getDexterity() {
return dexterity;
}
public void printDexRolls() {
System.out.println("Dex: roll 1 = " + dexRolls[0]);
System.out.println("Dex: roll 2 = " + dexRolls[1]);
System.out.println("Dex: roll 3 = " + dexRolls[2]);
}
public int getConsitution() {
return constitution;
}
public void printConRolls() {
System.out.println("Con: roll 1 = " + conRolls[0]);
System.out.println("Con: roll 2 = " + conRolls[1]);
System.out.println("Con: roll 3 = " + conRolls[2]);
}
public int getIntelligence() {
return intelligence;
}
public void printIntRolls() {
System.out.println("Int: roll 1 = " + intRolls[0]);
System.out.println("Int: roll 2 = " + intRolls[1]);
System.out.println("Int: roll 3 = " + intRolls[2]);
}
public int getWisdom() {
return wisdom;
}
public void printWisRolls() {
System.out.println("Wis: roll 1 = " + wisRolls[0]);
System.out.println("Wis: roll 2 = " + wisRolls[1]);
System.out.println("Wis: roll 3 = " + wisRolls[2]);
}
public int getCharisma() {
return charisma;
}
public void printCharRolls() {
System.out.println("Char: roll 1 = " + charRolls[0]);
System.out.println("Char: roll 2 = " + charRolls[1]);
System.out.println("Char: roll 3 = " + charRolls[2]);
}
public void printAbilities() {
System.out.println("Str = " + getStrength());
System.out.println("Dex = " + getDexterity());
System.out.println("Con = " + getConsitution());
System.out.println("Int = " + getIntelligence());
System.out.println("Wis = " + getWisdom());
System.out.println("Char = " + getCharisma());
}
}
公共类PlayerCharacter{
智力、力量、灵巧、体质、智力、智慧、魅力;
int[]strolls、dexRolls、conRolls、intRolls、wisRolls、charRolls;
public void generatablescoresmethod1(){
strolls=新整数[3];
dexRolls=新整数[3];
conRolls=新整数[3];
intRolls=newint[3];
Wislolls=新整数[3];
charRolls=新整数[3];
对于(int i=0;i<3;i++){
strRolls[i]=dice.dice.D6.getNewRoll();
强度+=strolls[i];
dexRolls[i]=dice.dice.D6.getNewRoll();
灵巧度+=dexRolls[i];
conRolls[i]=dice.dice.D6.getNewRoll();
宪法+=宪法[i];
intRolls[i]=dice.dice.D6.getNewRoll();
智力+=内向[i];
wisRolls[i]=dice.dice.D6.getNewRoll();
智慧+=智慧[我];
charRolls[i]=dice.dice.D6.getNewRoll();
魅力+=魅力[i];
}
}
public int getStrength(){
回归力量;
}
公共作废打印错误(){
System.out.println(“Str:roll 1=“+strRolls[0]);
System.out.println(“Str:roll 2=“+strRolls[1]);
System.out.println(“Str:roll 3=“+strRolls[2]);
}
public int getDextrity(){
返回灵巧度;
}
公开作废{
System.out.println(“Dex:roll 1=“+dexRolls[0]);
System.out.println(“Dex:roll 2=“+dexRolls[1]);
System.out.println(“Dex:roll 3=“+dexRolls[2]);
}
公共int GetConstruction(){
回归宪法;
}
公共无效打印控制卷(){
System.out.println(“Con:roll 1=“+conRolls[0]);
System.out.println(“Con:roll 2=“+conRolls[1]);
System.out.println(“Con:roll 3=“+conRolls[2]);
}
公共情报{
返回情报;
}
公共空白打印简介(){
System.out.println(“Int:roll 1=“+intRolls[0]);
System.out.println(“Int:roll 2=“+intRolls[1]);
System.out.println(“Int:roll 3=“+intRolls[2]);
}
公共智慧{
回归智慧;
}
公开作废{
系统输出打印项次(“Wis:roll 1=“+WISCROLLS[0]);
系统输出打印项次(“Wis:roll 2=“+WISCROLLS[1]);
系统输出打印项次(“Wis:roll 3=“+WISCROLLS[2]);
}
公共int getCharisma(){
回归魅力;
}
公共无效打印字符卷(){
System.out.println(“Char:roll 1=“+charRolls[0]);
System.out.println(“Char:roll 2=“+charRolls[1]);
System.out.println(“字符:roll 3=“+charRolls[2]);
}
公共空间印刷能力(){
System.out.println(“Str=“+getStrength());
System.out.println(“Dex=“+getDexterity());
System.out.println(“Con=“+getConstruction());
System.out.println(“Int=“+getIntelligence());
System.out.println(“Wis=“+GetWisset());
System.out.println(“Char=“+getCharisma());
}
}
我怎样才能以更高效的方式完成相同的任务?这个怎么样:
public void printRolls( String label, int[] rolls) {
System.out.println(label + ": roll 1 = " + rolls[0]);
System.out.println(label + ": roll 2 = " + rolls[1]);
System.out.println(label + ": roll 3 = " + rolls[2]);
}
您可以减少重复的代码行
enum Attribute {
Str, Con, Dex, Int, Wis, Cha
}
class PlayerCharacter {
static final Random rand = new Random();
static final Attribute[] ATTRS = Attributes.values();
final int[] attr = new int[ATTRS.length];
PlayerCharacter() {
for(int i = 0; i < attr.length; i++)
attr[i] = rand.nextInt(6) + rand.nextInt(6) + rand.nextInt(6) + 3;
}
public int getAttr(Attribute attr) {
return attrs[attr.ordinal()];
}
public void printAbilities() {
for(int i = 0; i < ATTRS.length; i++)
System.out.println(ATTRS[i]+ " = " + attrs[i]);
}
enum属性{
Str、Con、Dex、Int、Wis、Cha
}
类玩家角色{
静态最终随机兰德=新随机();
静态最终属性[]ATTRS=Attributes.values();
最终整数[]属性=新整数[ATTRS.length];
PlayerCharacter(){
对于(int i=0;i
注意:您可能需要任何其他属性,如HP、AC、Max HP、Level、XP等。您可以声明一个类
能力
,并创建强度
,灵巧性
,…实例。以下代码片段可能是一个开始:
class Ability {
private final int[] rolls;
private int value;
public Ability(int dice) {
rolls = new int[dice];
}
public int roll() {
value = 0;
for (int i = 0; i < rolls.length; i++) {
rolls[i] = dice.Dice.D6.getNewRoll();
value += rolls[i];
}
return value;
}
public int getValue() {
return value;
}
public void printRolls() {
// ... tbd ...
}
}
我要做的唯一一件事是创建一个静态掷骰方法,它返回您需要的数组,这样您就可以为任何类型的骰子生成掷骰数组:
public static int[] roll(int numberOfDice, int sidesOnEachDie) {
int[] result = new int[numberOfDice];
for(int i = 0; i < numberOfDice; ++i) {
result[i] = 1 + (int) Math.floor(Math.random() *
(double) sidesOnEachDie);
}
return result;
}
这将给出在整数数组中滚动3D6的结果。您可以将所有属性保留在整数[]中。因此,不要将力量、灵巧度、体质、智力、智慧和魅力作为单独的变量
int[] characteristics;
那么0代表力量,1代表灵巧,依此类推
要保持滚动值,您需要一个int[][]。这是较少的代码;它在CPU使用或内存使用方面并不“有效”,但会缩短代码的写入和读取时间。我假设骰子滚动是随机的,无论其顺序如何
package example;
public class PlayerCharacter
{
int strength, dexterity, constitution, intelligence, wisdom, charisma;
int[] strRolls, dexRolls, conRolls, intRolls, wisRolls, charRolls;
private int getScore(Dice d, int[] storage)
{
for (int i=0; i<storage.length; i++)
{
storage[i] = d.getNewRoll();
}
int result = 0;
for (int i=0; i<storage.length; i++) { result += storage[i]; }
}
public void generateAbilityScoresMethod1()
{
strRolls = new int[3];
dexRolls = new int[3];
conRolls = new int[3];
intRolls = new int[3];
wisRolls = new int[3];
charRolls = new int[3];
for (int i = 0; i < 3; i++)
{
strength = getScore(dice.Dice.D6, strRolls);
dexterity = getScore(dice.Dice.D6, dexRolls);
constitution = getScore(dice.Dice.D6, conRolls);
intelligence = getScore(dice.Dice.D6, intRolls);
wisdom = getScore(dice.Dice.D6, wisRolls);
charisma = getScore(dice.Dice.D6, charRolls);
}
}
public int getStrength()
{
return strength;
}
private void printArrayRolls(String label, int[] rolls)
{
for (int i=0; i < rolls.length; i++)
{
System.out.println(label + ": roll " + rolls[i]);
}
}
public void printStrRolls()
{
printArrayRolls("Str", strRolls);
}
public int getDexterity()
{
return dexterity;
}
public void printDexRolls()
{
printArrayRolls("Dex", dexRolls);
}
public int getConsitution()
{
return constitution;
}
public void printConRolls()
{
printArrayRolls("Con", conRolls);
}
public int getIntelligence()
{
return intelligence;
}
public void printIntRolls()
{
printArrayRolls("Int", intRolls);
}
public int getWisdom()
{
return wisdom;
}
public void printWisRolls()
{
printArrayRolls("Wis", wisRolls);
}
public int getCharisma()
{
return charisma;
}
public void printCharRolls()
{
printArrayRolls("Char", charRolls);
}
public void printAbilities()
{
System.out.println("Str = " + getStrength());
System.out.println("Dex = " + getDexterity());
System.out.println("Con = " + getConsitution());
System.out.println("Int = " + getIntelligence());
System.out.println("Wis = " + getWisdom());
System.out.println("Char = " + getCharisma());
}
}
package example;
public class PlayerCharacter
{
int strength, dexterity, constitution, intelligence, wisdom, charisma;
int[] strRolls, dexRolls, conRolls, intRolls, wisRolls, charRolls;
private int getScore(Dice d, int[] storage)
{
for (int i=0; i<storage.length; i++)
{
storage[i] = d.getNewRoll();
}
int result = 0;
for (int i=0; i<storage.length; i++) { result += storage[i]; }
}
public void generateAbilityScoresMethod1()
{
strRolls = new int[3];
dexRolls = new int[3];
conRolls = new int[3];
intRolls = new int[3];
wisRolls = new int[3];
charRolls = new int[3];
for (int i = 0; i < 3; i++)
{
strength = getScore(dice.Dice.D6, strRolls);
dexterity = getScore(dice.Dice.D6, dexRolls);
constitution = getScore(dice.Dice.D6, conRolls);
intelligence = getScore(dice.Dice.D6, intRolls);
wisdom = getScore(dice.Dice.D6, wisRolls);
charisma = getScore(dice.Dice.D6, charRolls);
}
}
public int getStrength()
{
return strength;
}
private void printArrayRolls(String label, int[] rolls)
{
for (int i=0; i < rolls.length; i++)
{
System.out.println(label + ": roll " + rolls[i]);
}
}
public void printStrRolls()
{
printArrayRolls("Str", strRolls);
}
public int getDexterity()
{
return dexterity;
}
public void printDexRolls()
{
printArrayRolls("Dex", dexRolls);
}
public int getConsitution()
{
return constitution;
}
public void printConRolls()
{
printArrayRolls("Con", conRolls);
}
public int getIntelligence()
{
return intelligence;
}
public void printIntRolls()
{
printArrayRolls("Int", intRolls);
}
public int getWisdom()
{
return wisdom;
}
public void printWisRolls()
{
printArrayRolls("Wis", wisRolls);
}
public int getCharisma()
{
return charisma;
}
public void printCharRolls()
{
printArrayRolls("Char", charRolls);
}
public void printAbilities()
{
System.out.println("Str = " + getStrength());
System.out.println("Dex = " + getDexterity());
System.out.println("Con = " + getConsitution());
System.out.println("Int = " + getIntelligence());
System.out.println("Wis = " + getWisdom());
System.out.println("Char = " + getCharisma());
}
}
包示例;
公共类玩家角色
{
智力、力量、灵巧、体质、智力、智慧、魅力;
int[]strolls、dexRolls、conRolls、intRolls、wisRolls、charRolls;
私有int getScore(骰子d,int[]存储)
{
对于(int i=0;i这是更少的代码;它在CPU使用或内存使用方面不是“更高效”,而是使代码的写入和读取时间更短。我假设掷骰子是随机的,无论其顺序如何
package example;
public class PlayerCharacter
{
int strength, dexterity, constitution, intelligence, wisdom, charisma;
int[] strRolls, dexRolls, conRolls, intRolls, wisRolls, charRolls;
private int getScore(Dice d, int[] storage)
{
for (int i=0; i<storage.length; i++)
{
storage[i] = d.getNewRoll();
}
int result = 0;
for (int i=0; i<storage.length; i++) { result += storage[i]; }
}
public void generateAbilityScoresMethod1()
{
strRolls = new int[3];
dexRolls = new int[3];
conRolls = new int[3];
intRolls = new int[3];
wisRolls = new int[3];
charRolls = new int[3];
for (int i = 0; i < 3; i++)
{
strength = getScore(dice.Dice.D6, strRolls);
dexterity = getScore(dice.Dice.D6, dexRolls);
constitution = getScore(dice.Dice.D6, conRolls);
intelligence = getScore(dice.Dice.D6, intRolls);
wisdom = getScore(dice.Dice.D6, wisRolls);
charisma = getScore(dice.Dice.D6, charRolls);
}
}
public int getStrength()
{
return strength;
}
private void printArrayRolls(String label, int[] rolls)
{
for (int i=0; i < rolls.length; i++)
{
System.out.println(label + ": roll " + rolls[i]);
}
}
public void printStrRolls()
{
printArrayRolls("Str", strRolls);
}
public int getDexterity()
{
return dexterity;
}
public void printDexRolls()
{
printArrayRolls("Dex", dexRolls);
}
public int getConsitution()
{
return constitution;
}
public void printConRolls()
{
printArrayRolls("Con", conRolls);
}
public int getIntelligence()
{
return intelligence;
}
public void printIntRolls()
{
printArrayRolls("Int", intRolls);
}
public int getWisdom()
{
return wisdom;
}
public void printWisRolls()
{
printArrayRolls("Wis", wisRolls);
}
public int getCharisma()
{
return charisma;
}
public void printCharRolls()
{
printArrayRolls("Char", charRolls);
}
public void printAbilities()
{
System.out.println("Str = " + getStrength());
System.out.println("Dex = " + getDexterity());
System.out.println("Con = " + getConsitution());
System.out.println("Int = " + getIntelligence());
System.out.println("Wis = " + getWisdom());
System.out.println("Char = " + getCharisma());
}
}
package example;
public class PlayerCharacter
{
int strength, dexterity, constitution, intelligence, wisdom, charisma;
int[] strRolls, dexRolls, conRolls, intRolls, wisRolls, charRolls;
private int getScore(Dice d, int[] storage)
{
for (int i=0; i<storage.length; i++)
{
storage[i] = d.getNewRoll();
}
int result = 0;
for (int i=0; i<storage.length; i++) { result += storage[i]; }
}
public void generateAbilityScoresMethod1()
{
strRolls = new int[3];
dexRolls = new int[3];
conRolls = new int[3];
intRolls = new int[3];
wisRolls = new int[3];
charRolls = new int[3];
for (int i = 0; i < 3; i++)
{
strength = getScore(dice.Dice.D6, strRolls);
dexterity = getScore(dice.Dice.D6, dexRolls);
constitution = getScore(dice.Dice.D6, conRolls);
intelligence = getScore(dice.Dice.D6, intRolls);
wisdom = getScore(dice.Dice.D6, wisRolls);
charisma = getScore(dice.Dice.D6, charRolls);
}
}
public int getStrength()
{
return strength;
}
private void printArrayRolls(String label, int[] rolls)
{
for (int i=0; i < rolls.length; i++)
{
System.out.println(label + ": roll " + rolls[i]);
}
}
public void printStrRolls()
{
printArrayRolls("Str", strRolls);
}
public int getDexterity()
{
return dexterity;
}
public void printDexRolls()
{
printArrayRolls("Dex", dexRolls);
}
public int getConsitution()
{
return constitution;
}
public void printConRolls()
{
printArrayRolls("Con", conRolls);
}
public int getIntelligence()
{
return intelligence;
}
public void printIntRolls()
{
printArrayRolls("Int", intRolls);
}
public int getWisdom()
{
return wisdom;
}
public void printWisRolls()
{
printArrayRolls("Wis", wisRolls);
}
public int getCharisma()
{
return charisma;
}
public void printCharRolls()
{
printArrayRolls("Char", charRolls);
}
public void printAbilities()
{
System.out.println("Str = " + getStrength());
System.out.println("Dex = " + getDexterity());
System.out.println("Con = " + getConsitution());
System.out.println("Int = " + getIntelligence());
System.out.println("Wis = " + getWisdom());
System.out.println("Char = " + getCharisma());
}
}
包示例;
公共类玩家角色
{
智力、力量、灵巧、体质、智力、智慧、魅力;
int[]strolls、dexRolls、conRolls、intRolls、wisRolls、charRolls;
私有int getScore(骰子d,int[]存储)
{
对于(int i=0;i)您为什么要存储掷骰数组?主要是想看看我的掷骰是如何进行的。我的掷骰是由一个骰子枚举类处理的。添加一次返回多个掷骰的选项是否为时已晚