【问题标题】:Changing value of element in an ArrayDeque更改 ArrayDeque 中元素的值
【发布时间】:2013-07-10 22:21:50
【问题描述】:

现在我遇到了 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;
    }
}

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

【问题讨论】:

  • 您不能使用 [] 访问 ArrayDeque 元素。您需要使用迭代器。
  • @johnchen902 那我怎么办?
  • @AlexeyOdintsov 好的,我会尝试

标签: java element arraydeque


【解决方案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);

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

void setFloor(int floor)

这意味着,您的方法 setFloor 不返回任何内容;因此没有什么可以分配的。

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

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

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

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

其他:您的 Storage 类声明了一个无参数构造函数,它设置了一些默认值。强制此类类的用户传递合理的值也是一种很好的做法。所以我建议删除无参数构造函数,只留下另一个,它反过来应该对传入的参数进行一些检查(例如检查类型是否不是null)。

【讨论】:

  • 这么多信息。我是 Java 新手,一旦我在 cmets 发现 ArrayDeque 比 ArrayList 更好。但我不知道,从来没有用谷歌搜索过为什么。我是 Java 新手,所以我不知道每个命令。顺便说一句,谢谢,我会尽力总结你写给我的内容。
  • 是的,我知道。刚接触 Java 时,会有很多主题需要学习。一步一步做。尽管如此,请尝试从一开始就使用最佳实践。很高兴为您提供帮助。
【解决方案2】:

你可以这样做。

    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 不是元素随机访问的正确集合。

【讨论】:

    猜你喜欢
    • 2018-12-07
    • 2013-07-10
    • 2021-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多