首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改ArrayDeque中元素的值

更改ArrayDeque中元素的值
EN

Stack Overflow用户
提问于 2013-07-12 19:21:56
回答 2查看 2.4K关注 0票数 1

现在我在ArrayDeque指定的元素上遇到了问题。

代码语言:javascript
复制
Storages.add(new Storage("Furniture storage", 5, 58));

首先是存储类型。下一层,雷斯通是doorNumber。

现在,我想将特定的ArrayDeque元素Floor更改为另一个元素。

例如从第二列表项

代码语言:javascript
复制
Meat storage    1   18

代码语言:javascript
复制
Meat storage    7   18      

这是我的主类

代码语言:javascript
复制
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);

有一个存储类

代码语言:javascript
复制
    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;
    }
}

附注:不要以我的语法来评判我,英语不是我的母语^^

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-12 19:42:30

你的代码有几个问题。我将尝试一步一步地对它们进行评论:

代码语言:javascript
复制
ArrayDeque<Storage> Storages = new ArrayDeque<Storage>();

1)您使用ArrayDeque有什么原因吗?您是否需要双端队列行为?或者你只是需要一个集合?在后一种情况下,我建议只使用ArrayList。

2) naming convention for the Java programming language指定变量始终以小写字符开头。

3)对于变量(以及参数和方法)的声明,最好只使用接口类型,这样您就可以清楚地知道将使用什么接口。

总结一下,我会这样写:

代码语言:javascript
复制
Collection<Storage> storages = new ArrayList<Storage>();

接下来..。

代码语言:javascript
复制
Storages[1] = storage_obj.setFloor(7);

这不能编译。您的存储类声明了一个具有以下签名的setFloor方法:

代码语言:javascript
复制
void setFloor(int floor)

这意味着,您的方法setFloor不会返回任何内容;因此,没有任何可以赋值的内容。

此外,变量Storages不是数组。所以你不能通过使用括号[]来访问第一个元素。

实际起作用的是下面的代码,您可以使用它来更改集合中的第一个元素:

代码语言:javascript
复制
storages.get(0).setFloor(7);

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

另外:您的Storage类声明了一个无参数的构造函数,它设置了一些默认值。强制这些类的用户传递合理的值也是一个很好的实践。因此,我建议删除无参数的构造器,只保留另一个构造器,该构造器应对传入的参数进行一些检查(例如检查类型是否不为null)。

票数 1
EN

Stack Overflow用户

发布于 2013-07-12 19:42:45

你可以这样做。

代码语言:javascript
复制
    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不是元素随机访问的正确集合。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17613824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档