为什么这些角色对象不保留特征?

时间:2020-02-13 18:08:17

标签: java object rpg

我正在为我的AP Comp Sci类编写一个基本的RPG。对于这个问题,只有两个重要的类是Character和Client。客户运行一切,而角色具有角色通常具有的许多属性。

问题:我正在创建一个名为Character的类的2个不同实例。但是,当我尝试使用toString()方法将它们打印出来时,只会打印最近实例化的一个。

尝试的解决方案我尝试在其他类中编写toString()方法,并使用Character作为参数,已经在这个问题上进行了搜索,但是没有发现任何类似的东西。还尝试过放置“ this”。在toString()方法中的变量前面。

代码

客户端类

import java.util.*;

public class Client{ //change to client

   public static void main(String[] args){

      Character NPC = new Character("Neil", 2, 20); //instance 1

      Character mainChar = new Character("Alfred", 3, 18);  //instance 2

      System.out.println(mainChar.toString());    //PROBLEM
      System.out.println(NPC.toString());         //PROBLEM

   }

} 

角色类

import java.util.*;

public class Character{
   public static String name; //name in gameplay, not in program
   public static int type; //1) tank, 2) range, 3) magic
   public static int hp; //health
   public static int age; //age
   public static int dmg; //avg. damage per attack
   public static int dmgMod; //+/- from dmg
   public static Item[] inventory = new Item[10]; //array of different things. Item is another class

   public Character(String name, int type, int age){
      int modify = new Random().nextInt(3);
      inventory[0] = new Weapon("Fists");
      this.name = name;
      this.type = type;
      this.age = age;

      this.hp = age * 15;
      this.dmg = 0; // ***
      this.dmgMod = 2 + (int)(this.age / 10) + modify;

   }
   //THIS is where the issue happens
   public String toString(){
      return "\nName: " + name + "\n" +
                         "Class: " + type + "\n" +
                         "Age: " + age + "\n" +
                         "HP: " + hp + "\n" +
                         "Damage: " + dmg + "\n" +
                         "Damage Modifier: " +  dmgMod;
   }
}

打印出的内容

名称:Alfred
班级:3
年龄:18
惠普:270
伤害:0
伤害修正:5

名称:Alfred
班级:3
年龄:18
惠普:270
伤害:0
伤害修正:5

应打印的内容
姓名:阿尔弗雷德
班级:3
年龄:18
惠普:270
伤害:[随机]
伤害修饰符:[随机]

名称:尼尔
班级:2
年龄:20
HP:300
伤害:[随机]
伤害修饰符:[随机]

非常感谢您的帮助,我希望这不是一个愚蠢的问题。而且,据我所知,在此网站上没有人问过类似的问题。

1 个答案:

答案 0 :(得分:2)

此处使用static关键字意味着“ Character”类的任何对象在这些属性中必须具有相同的值。因此,当您创建一个新的Character对象时,先前创建的Character对象将覆盖其所有属性。摆脱所有这些静态关键字,您应该会满意。