现在我有ArrayDeque指定元素的问题。
Storages.add(new Storage("Furniture storage", 5, 58));
首先是存储类型。下一个楼层,最后一个是门号。
现在我想将特定的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 :(得分: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
的类型)。
答案 1 :(得分: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不是元素随机访问的正确集合。