Можно ли идентифицировать объект на основе индекса? - PullRequest
0 голосов
/ 24 октября 2019

Итак, допустим, у меня есть класс Bus, и у меня есть два экземпляра шины.

Bus bus1 = new Bus(); Bus bus2 = new Bus();

Теперь, если я предложу пользователю ввести индекс, допустим, он входит2. Как я могу проверить, существует ли bus2?

Ответы [ 2 ]

0 голосов
/ 24 октября 2019

Сначала мы автоматически нумеруем наши автобусы.

class Bus {
    private static int lastId = 0;
    int id;

    Bus() {
       id = ++lastId; // assign unique bus id
    }

    int getId() {
        return id;
    }
}

Где-то мы отслеживаем наши автобусы по мере их создания. Так как мы хотим отслеживать по целому номеру идентификатора, карта от идентификатора к шине полезна. (Мы могли бы также использовать массив, так как номера шин распределены плотно, но карта имеет некоторые преимущества, если шины уничтожены или созданы, так как номера шин больше не обязательно плотные).

Map<Integer, Bus> busMap = new HashMap<>();

bus = new Bus(); // 1
busMap.put(bus.getId(), bus);

bus = new Bus(); // 2
busMap.put(bus.getId(), bus);

Теперьчтобы получить / проверить шину (предположим, пользовательский ввод в int b):

   bus = busMap.get(b);
   if (bus == null) 
      … then b is not a valid bus id …

   … otherwise we have the bus we wanted …
0 голосов
/ 24 октября 2019

Я бы сказал, что шина должна быть идентифицирована по идентификатору, а не только потому, что она является второй, которая будет создана. Итак, если вы добавите свойство

private int ID

в класс Bus и переопределите, в классе Bus,

  @Override
  public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ID;
    return result;
  }

  @Override
  public boolean equals(Object obj) {
    if (this == obj)
      return true;
    if (obj == null)
      return false;
    if (getClass() != obj.getClass())
      return false;
    Bus other = (Bus) obj;
    if (ID != other.ID)
      return false;
    return true;
  }

, вы сможете различить две шины, содержащиеся в списке

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