2013-07-12 2 views
0

Теперь у меня проблема с указанным элементом ArrayDeque.Изменение значения элемента в ArrayDeque

Storages.add(new Storage("Furniture storage", 5, 58)); 

Первый тип хранения. Следующий одноэтажный, а последний - номер двери.

Теперь я хочу изменить определенный элемент ArrayDeque Floor на другой.

Например, из второго элемента списка

Meat storage 1 18 

в

Meat storage 7 18  

есть мой основной класс

ArrayDeque<Storage> Storages = new ArrayDeque<Storage>(); 
Storage storage_obj = new Storage(); 

Storages.add(new Storage("Furniture storage", 5, 58)); 
Storages.add(new Storage("Meat storage", 1, 18)); 
Storages.add(new Storage("Hardware storage", 4, 41)); 
Storages.add(new Storage("Technique storage", 2, 27)); 
Storages.add(new Storage("Vegetable storage", 8, 88)); 

Storages[1] = storage_obj.setFloor(7); 

System.out.println("Whole storages list"); 
outputStorages(Storages); 

Существует класс хранения

public class Storage { 
     private String type; 
     private int floor; 
     private int doorNumber; 


     public Storage(){ 
      this("------", 0,0); 
} 
    public Storage(String type_t, int floor_t, int doorNumber_t){ 
     type = type_t; 
     floor = floor_t; 
     doorNumber = doorNumber_t; 
    } 

    void setType(String type){ 
     this.type = type; 
    } 
    String getType(){ 
     return this.type; 
    } 

    void setFloor(int floor){ 
     this.floor = floor; 
    } 
    int getFloor(){ 
     return this.floor; 
    } 

    void setDoorNumber(int doorNumber){ 
     this.doorNumber = doorNumber; 
    } 
    int getDoorNumber(){ 
     return this.doorNumber; 
    } 
} 

P.s. Не судите меня за мою грамматику, английский - это не мой родной язык ^^

+0

Вы не можете получить доступ к элементам ArrayDeque с помощью []. Вам нужно использовать Итератор. –

+0

@ johnchen902 что бы мне лучше тогда? –

+0

@AlexeyOdintsov ok я попробую –

ответ

1

С кодом есть несколько проблем. Я буду пытаться комментировать их шаг за шагом:

ArrayDeque<Storage> Storages = new ArrayDeque<Storage>(); 

1) Есть ли какая-либо причина, почему вы используете ArrayDeque? Вам нужно поведение очереди с двойным завершением? Или вам просто нужна коллекция? В последнем случае я бы предложил просто использовать ArrayList.

2) naming convention for the Java programming language указывает, что всегда следует начинать с символа в нижнем регистре для переменных.

3) Рекомендуется использовать только тип интерфейса для деклараций переменных (а также параметров и методов), поэтому вы четко указываете, какой интерфейс вы будете использовать.

Подводя итог, я хотел бы написать:

Collection<Storage> storages = new ArrayList<Storage>(); 

Далее ...

Storages[1] = storage_obj.setFloor(7); 

Это не компилируется. Ваш класс хранения объявляет метод setFloor со следующей подписью:

void setFloor(int floor) 

Это означает, что ваш метод setFloor ничего не возвращает; таким образом, нет ничего, что можно было бы назначить.

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

Что на самом деле работает, является следующим кодом, с помощью которого вы можете изменить первый элемент в коллекции:

storages.get(0).setFloor(7); 

Обратите внимание, что я уже использовал переименованный переменный.

Что-то еще: класс Storage объявляет конструктор без параметров, который устанавливает некоторые значения по умолчанию.Также хорошей практикой является принуждение пользователей таких классов к принятию разумных значений. Поэтому я предлагаю удалить конструктор без параметров, просто оставив другой, который, в свою очередь, должен выполнить некоторые проверки входящих аргументов (например, проверка типа для не null).

+0

Так много информации. Im new на Java, как только я нашел в комментариях, что ArrayDeque лучше, чем ArrayList. Но я не знаю, никогда не искал почему. Я новый на Java, поэтому я не знаю каждой команды. Btw спасибо, я постараюсь подытожить то, что вы мне написали. –

+1

Да, я знаю. Будет много тем, которые нужно узнать, когда они появятся на Java. Сделайте это шаг за шагом. Тем не менее, старайтесь использовать лучшие практики с самого начала. Рад помочь вам. – Seelenvirtuose

+0

Его приятно, что есть так много полезных людей. –

1

Вы делаете так.

Но поскольку @ johnchen902 упоминается ArrayDeuque, это не так. Коллекция для случайного доступа к элементам.