2013-07-12 46 views
0

现在我遇到了ArrayDeque指定元素的问题。更改ArrayDeque中元素的值

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

首先是存储类型。下一个楼层,最后一个是doorNumber。

现在我想改变具体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元素。你需要使用Iterator。 –

+0

@ johnchen902那我会更好吗? –

+0

@AlexeyOdintsov好吧,我会尝试 –

回答

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); 

请注意,我已经使用重命名变量。

别的东西:你的存储类声明了一个无参数的构造函数,它设置一些默认值。强制这些类的用户通过合理的价值也是一个好习惯。所以我建议删除无参数的构造函数,只留下另一个构造函数,而后者应该对传入参数进行一些检查(例如检查类型是否为null)。

+0

如此多的信息。我在Java新,一旦我发现评论ArrayDeque是更好的ArrayList。但我不知道,从来没有谷歌为什么。我在Java新,所以我不知道每个命令。顺便说一句,谢谢,我会尽量总结你写给我的。 –

+1

是的,我知道。新手到Java时会有很多需要学习的主题。一步一步做吧。尽管如此,尝试从一开始就使用最佳实践。很高兴帮助你。 – Seelenvirtuose

+0

很高兴有这么多有帮助的人。 –

1

你可以这样做。

for (Iterator iter = Storages.iterator(); iter.hasNext();) { 
     Storage o = (Storage)iter.next(); 
     if (o.getFloor() == 1 && o.getDoorNumber() == 18) { 
      o.setFloor(7); 
     } 
     System.out.println(o); 
    } 

但是正如@ johnchen902提到的ArrayDeuque不是正确的元素随机访问集合。