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

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

public static void main(String[] args) throws IOException  {
do{
switch(menu){
case 1:
int x=//random generated number;
String name=//insert name;
reception add=new Reception(x,name);continue;


Public class reception extends Hotel{
public Reception(int number,String name,){
super(number,name);
}

import java.util.ArrayList;

public abstract class Hotel {
    ArrayList<Integer> numerodehotel = new ArrayList<Integer>();
    ArrayList<String> residente1 = new ArrayList<String>();


    public Hotel(int number, String resident){
    this.resident1.add(resident);
    this.hotelroomnumber.add(number);
    }

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

В основном классе есть переключатель с делом, в то время как моя идея заключалась в том, чтобы добавить все элементы ввода без перерасчета и иметь возможность просматривать их все.

-6
Mobiuzz 29 Май 2017 в 00:51

2 ответа

Лучший ответ

Вы создаете новый объект приема на каждой итерации цикла. Попробуйте поместить это определение перед циклом и использовать этот объект в цикле. Кроме того, вам нужно написать пустой конструктор и getters / setters для значений:

reception add=new Reception();
do {
    ...
    add.setNumerodehotel(x);
    add.setResidente1(name);
} while (...)

public abstract class Hotel {
    ArrayList<Integer> numerodehotel = new ArrayList<Integer>();
    ArrayList<String> residente1 = new ArrayList<String>();

    public Hotel(){
    }

    public void setNumerodehotel(int number){
       this.hotelroomnumber.add(number);
    }

    public void setResidente1(String resident){
       this.resident1.add(resident);
    }
}
0
Yuri Heiko 28 Май 2017 в 22:09

Недостаток в вашем конструкторе класса Hotel. Вы определяете ArrayLists при построении класса Hotel

public abstract class Hotel {
    // Every time you create a new Hotel these two lines are executed
    ArrayList<Integer> numerodehotel = new ArrayList<Integer>();
    ArrayList<String> residente1 = new ArrayList<String>();

    public Hotel(int number, String resident){
        this.resident1.add(resident);
        this.hotelroomnumber.add(number);
    }
}

Это похоже на это

public abstract class Hotel {
    ArrayList<Integer> numerodehotel;
    ArrayList<String> residente1;

    public Hotel(int number, String resident){
        numerodehotel = new ArrayList<Integer>();
        residente1 = new ArrayList<String>();
        this.resident1.add(resident);
        this.hotelroomnumber.add(number);

    }
}

Итак, как вы можете видеть, каждый раз, когда вы создаете Reception (новый Hotel), создается новый ArrayList, и тогда в вашем ArrayLists будет существовать только один элемент

Возможно, вы просто захотите удалить добавление из конструктора и добавить его отдельным методом.

0
Java Devil 28 Май 2017 в 22:09