Получение переменных из конструктора Java - PullRequest
0 голосов
/ 15 марта 2019

Я новичок в программировании на Java, извините, если это глупый вопрос.

Мне трудно правильно сформулировать этот вопрос, но у меня есть задание создать класс самолета, который может совершать посадку, взлет и т. Д., И мне нужно проверить его с помощью Testclass. Когда новый объект вводится, он автоматически присваивает уникальный идентификатор самолету в конструкторе.

Я могу сделать это с помощью метода экземпляра, так как он имеет возвращаемое значение, которое возвращается в Testclass. Вопрос хочет, чтобы я делал это в самом конструкторе, однако конструктор никогда ничего не возвращает. Таким образом, переменная никогда не отправляется в Testclass. Я явно не правильно понимаю ООП. Даже когда я пытаюсь просто использовать метод getter для получения идентификатора, созданного в конструкторе, он дает мне инициализированную переменную до того, как конструктор поработает над этим. Это код, который у меня есть до сих пор, и я знаю, что он совершенно неправильный, но если бы кто-то мог указать мне правильное направление или сказать, как лучше сформулировать этот вопрос, это было бы огромной помощью.

// I need to enter 3 aircraft into the system in the testclass

public class Aircraft {

  private int aircraftID;
  private static int lastID;
  private String airportcode;
  private int ID = 100;

  private int count;



  public Aircraft(int a, int b, int c){
    // Constructor


     // Assign ID
     this.ID = a;
     lastID = ID;
     ID++;

     this.ID =b;
     lastID = ID;
     ID++;
  }
}

Ответы [ 2 ]

1 голос
/ 15 марта 2019

ОК, вы хотите создать самолет, который имеет автоматически назначенный уникальный идентификатор и может взлетать и приземляться.Это означает, что вам нужно поле для отслеживания идентификатора, поле для отслеживания, находится ли он в воздухе (или нет), и методы для взлета и посадки.Вам также необходимо статическое поле для генерации уникальных идентификаторов.(Обратите внимание, что эта реализация не является поточно-ориентированной.)

private class Aircraft {

    private static int staticId = 0;
    private int uniqueId = 0;
    private boolean onGround = true; // Aircraft start on the ground in this implementation

    public Aircraft(){
        this.uniqueId = staticId; // putting this line first makes uniqueId zero-indexed in effect
        staticId++;
    }

    public void land(){
        onGround = true;
    }

    public void takeoff(){
        onGround = false;
    }

    public boolean isFlying(){
        return !onGround; // If it's not on the ground, it's flying
    }

    public int getUniqueId(){
        return uniqueId;
    }
}

Модульные тесты проверяют все методы и ожидаемую функциональность рассматриваемого класса:

import org.junit.Test;
import static org.junit.Assert.*;
import Aircraft;

class Testclass {

    private final Aircraft aircraft = new Aircraft();

    @Test
    public void hasId(){
        aircraft.getUniqueId() >= 0;
    }

    @Test
    public void canLand(){
        assertTrue(aircraft.land());
    }

    @Test
    public void canTakeOff(){
        assertTrue(aircraft.takeOff());
    }

    @Test
    public void checkFlightOperationsAreTrackedCorrectly(){
        aircraft.land();
        assertFalse(aircraft.isFlying());
        aircraft.takeOff();
        assertTrue(aircraft.isFlying());
    }
}
0 голосов
/ 15 марта 2019

Как уже указывалось, конструктор ничего не возвращает (упрощенная версия состоит в том, что при new он возвращает экземпляр объекта). Я догадываюсь о том, что вы пытаетесь сделать, но я все равно пойду. Мне кажется, что вы пытаетесь втиснуть конструкцию 3 объектов в один конструктор - вот почему ваш конструктор имеет 3 параметра. Также вы играете хаос с идентификаторами.

Я удалил все переменные, которые я не совсем понял, оставив только идентификатор, который увеличивается с каждым экземпляром Aircraft. @Override в основном только для галочки.

public class Aircraft {
    private int aircraftID;
    private static int lastID = 0;

    @Override
    public String toString(){
        return "Aircraft_" + this.aircraftID;
    }

    public Aircraft() {
        lastID++;
        this.aircraftID = lastID;
    }
}

Я взял на себя смелость и написал TestClass просто чтобы посмотреть, имеем ли мы в виду то же самое. Опять же printAircraft() метод для шоу.

public class TestClass {
    private List<Aircraft> aircrafts;
    public TestClass(){
        aircrafts = new ArrayList<>();
    }

    public void addAircraft(Aircraft a){
        aircrafts.add(a);
    }

    public void printAircraft(){
        Iterator<Aircraft> it = aircrafts.iterator();
        while(it.hasNext()){
            System.out.println(it.next().toString());
        }
    }
}

и для его проверки мы создаем и экземпляр TestClass добавляем 3 Aircraft экземпляров и распечатываем содержимое

public static void main(String[] args) {
    TestClass tc = new TestClass();
    tc.addAircraft(new Aircraft());
    tc.addAircraft(new Aircraft());
    tc.addAircraft(new Aircraft());
    tc.printAircraft();
}

Это было бы так, если вы хотите написать TestClass. Если это будет дано, это поможет узнать, как это выглядит - возможно, это поможет нам лучше понять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...