Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更改ArrayQue中元素的值_Java_Element_Arraydeque - Fatal编程技术网

Java 更改ArrayQue中元素的值

Java 更改ArrayQue中元素的值,java,element,arraydeque,Java,Element,Arraydeque,现在我对ArrayQue指定的元素有问题 Storages.add(new Storage("Furniture storage", 5, 58)); 首先是存储类型。下一层,最后一层是门牌号 现在我想将特定的ArrayQue元素Floor更改为另一个元素 例如,来自第二个列表项 Meat storage 1 18 到 这是我的主课 ArrayDeque<Storage> Storages = new ArrayDeque<Storage>(); Stora

现在我对ArrayQue指定的元素有问题

Storages.add(new Storage("Furniture storage", 5, 58));
首先是存储类型。下一层,最后一层是门牌号

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

例如,来自第二个列表项

Meat storage    1   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);

另外,不要因为我的语法来评判我,英语不是我的母语^ ^

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

ArrayDeque<Storage> Storages = new ArrayDeque<Storage>();
这是不可编译的。您的存储类声明具有以下签名的setFloor方法:

void setFloor(int floor)
这意味着,您的方法setFloor不会返回任何内容;因此,没有什么可以分配给

此外,变量
Storages
不是数组。因此,不能使用括号
[]
访问第一个元素

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

storages.get(0).setFloor(7);
注意,我已经使用了重命名的变量

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

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

您不能使用[]访问ArrayDeque元素。你需要使用迭代器。@johnchen902有什么比这更好的吗?@AlexeyOdintsov好的,我会尝试提供很多信息。我是Java新手,有一次我在评论中发现ArrayQue比ArrayList更好。但我不知道,从未用谷歌搜索过原因。我是Java新手,所以我不知道每个命令。顺便说一句,谢谢。我会尽力总结你给我写的东西。是的,我知道。刚接触Java时,将有许多主题需要学习。一步一步来。然而,从一开始就尝试使用最佳实践。很高兴帮助你。
Storages[1] = storage_obj.setFloor(7);
void setFloor(int floor)
storages.get(0).setFloor(7);
    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);
    }