Java 更改ArrayQue中元素的值
现在我对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
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);
}