Почему эти объекты Персонажа не сохраняют черты? - PullRequest
0 голосов
/ 13 февраля 2020

Я пишу основную c RPG для своего класса AP Comp Sci. Для этого вопроса важны только два класса: Character и Client. Клиент запускает все, и у персонажа есть много атрибутов, которые у персонажа традиционно были бы.

Проблема: Я создаю 2 разных экземпляра класса с именем Character. Однако, когда я пытаюсь распечатать их, используя метод toString (), печатает только последний экземпляр.

Попытки решения Я пытался написать метод toString () в другом классы, и используя Character в качестве параметров, я решил эту проблему, но не нашел ничего подобного. Также попытался поставить «это». перед переменными в методе 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;
   }
}

Что печатает

Имя: Альфред
Класс: 3
Возраст: 18
HP: 270
Урон: 0
Модификатор урона : 5

Имя: Альфред
Класс: 3
Возраст: 18
HP: 270
Урон: 0
Модификатор урона: 5

Что следует распечатать
Имя: Альфред
Класс: 3
Возраст: 18
HP: 270
Урон: [случайно]
Модификатор урона: [случайно]

Имя: Нил
Класс: 2
Возраст: 20
HP: 300
Урон: [случайный]
Модификатор урона: [случайный]

Спасибо так много за помощь, и я надеюсь, что это не глупый вопрос. Также, насколько я мог найти, на этом сайте не задавалось ничего похожего на этот вопрос.

1 Ответ

2 голосов
/ 13 февраля 2020

Использование ключевого слова stati c здесь означает, что любой объект класса «Символ» должен иметь одинаковые значения в этих атрибутах. из-за этого при создании нового объекта Character у ранее созданного объекта Character все его атрибуты перезаписываются. избавьтесь от всех этих ключевых слов stati c, и все будет в порядке.

...