Ссылки на объекты разных классов - PullRequest
0 голосов
/ 25 мая 2020

У меня есть класс танка и класс предмета. В классе танков в конструкторе я сохраняю предметы танков с помощью arrayylist.

класс танка

public class Tank{

private String id;
private String name;
private String description;
private String imageBackground;
private double length;
private double height;
private double width;
private double temperature;
private int ph;

private List<Item> items;

public Tank() throws TankException{
    this("D1","Default", "Tank Default", 50.25, 10.55, 100.232, "./", 15, 7);
}


public Tank(String id, String name, String description, double length, double height, double width, String imageBackground, double temperature, int ph) throws TankException {
    setId(id);
    setName(name);
    setDescription(description);
    setLength(length);
    setHeight(height);
    setWidth(width);
    setImageBackground(imageBackground);
    setTemperature(temperature);
    setPh(ph);
    items = new ArrayList<Item>();      
}

предмет класса

public abstract class Item extends ImageView{

private static int nextId = 0;
private double xCoord, yCoord; //location
private double length, height; // define size of item
private String spriteImage;
private Tank tank;

protected Item(double xCoord, double yCoord, String spriteImage, double length, double height, Tank tank) throws ItemException {
    setId("I"+nextId); 
    nextId++;

    setLocation(xCoord,yCoord);
    setSpriteImage(spriteImage);        
    setLength(length);
    setHeight(height);      
    setTank(tank);
}

Теперь они просят меня добавить новый класс под названием keeper, который должен иметь три атрибута: id, name, surname.

Кроме того, они просят меня сохранить ссылки на элементы танков, за которые отвечает хранитель.

В танках мы не должны привлекать к ответственности смотрителя.

Максимальное количество танков, о которых может заботиться каждый хранитель, составляет 5.

Но я не знаю, правильно ли то, что я сделал. правильно, создайте объект типа элемента в хранителе и 5-позиционный массив в резервуаре.

Это мой хранитель класса кода:

public class Keeper {

private int id;
private String nombre;
private String apellido;
private Item itemstanques;


protected Keeper(int id, String nombre, String apellido) {
    this.id = id;
    this.nombre = nombre;
    this.apellido = apellido;
}

, а в классе резервуара я добавил 5-позиционный массив

 private List<Keeper> keeper; 

и конструктор

  public Tank(String id, String name, String description, double length, double height, double 
    width, String imageBackground, double temperature, int ph) throws TankException {
    setId(id);
    setName(name);
    setDescription(description);
    setLength(length);
    setHeight(height);
    setWidth(width);
    setImageBackground(imageBackground);
    setTemperature(temperature);
    setPh(ph);
    items = new ArrayList<Item>();
    keeper=new ArrayList<Keeper>(4);
}

Это правильно?

1 Ответ

0 голосов
/ 25 мая 2020

Итак, я вижу, как это сбивает вас с толку. Имейте в виду, что это всегда зависит от требований, поэтому я могу интерпретировать это неправильно. Но я бы сказал, что у танка есть список предметов, но внутри класса танка это может быть просто ссылка на список предметов. Затем в вашем главном окне, когда вы создаете свой танк, вы можете использовать метод Sperate для добавления предметов. Итак, класс танка может выглядеть так:

public class Tank{
.
.
.
private List<Item> items;

public Tank(String id, String name, String description, double length, double height, double width, String imageBackground, double temperature, int ph, List<Item> tankItems) throws TankException {
    setId(id);
    setName(name);
    setDescription(description);
    setLength(length);
    setHeight(height);
    setWidth(width);
    setImageBackground(imageBackground);
    setTemperature(temperature);
    setPh(ph);
    this.items = tankItems;      
}

Затем в свой основной вы можете добавить свой список:

public class Match {

    public static void main(String[] args) {
      Tank tank1 = new Tank("D1","Default", "Tank Default"
                           , 50.25, 10.55, 100.232, "./"
                           , 15, 7, addItems());
    }

   public static List<Items> addItems(){
      //build your list of tankItems here of items
      .
      .
      return tankItems;
   }
}

В зависимости от того, как я его читаю, и моего объяснения выше, я бы удалил танк из класса Item. Непонятно, должен ли предмет ассоциироваться с танком, но решать вам.

В вашем классе хранителя звучит так, как будто 1 хранитель может поддерживать 5 танков, поэтому один подход будет:

public class keeper {
    private int id;
    private String nombre;
    private String apellido;
    private List<tank> tanks;
    private boolean estoyLlena;


    protected Keeper(int id, String nombre, String apellido) {
        this.id = id;
        this.nombre = nombre;
        this.apellido = apellido;
        this.estoyLlena = false;
        tanks = null;
    }

    public boolean addTankToKeeper(Tank aTank) {

        if(this.tanks.size() < 5) {
            this.tanks.add(aTank);
            return true;
        } else {
            return false;
        }

    }
}

надеюсь, что это поможет.

...