Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.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 如何从数组中检索数据?_Java_Arrays - Fatal编程技术网

Java 如何从数组中检索数据?

Java 如何从数组中检索数据?,java,arrays,Java,Arrays,我正在为酒店预订系统编写一个程序。我目前有一个数组中的房间信息,我希望客户输入房间的ID,它将检索该房间的所有详细信息。以下是阵列的代码: Room [] rooms = { new Room("GARDEN0001", "NorthWest Garden View", 45.00), new Room("GARDEN0002", "SouthEast Garden View", 65.0), new Room("GARDEN0003", "North Gard

我正在为酒店预订系统编写一个程序。我目前有一个数组中的房间信息,我希望客户输入房间的ID,它将检索该房间的所有详细信息。以下是阵列的代码:

  Room [] rooms = 
  {
    new Room("GARDEN0001", "NorthWest Garden View", 45.00),
    new Room("GARDEN0002", "SouthEast Garden View", 65.0),
    new Room("GARDEN0003", "North Garden View", 35.00),
    new Room("GARDEN0004", "South Garden View", 52.0),
    new Room("GARDEN0005", "West Garden View", 35.00),
    new Room("GARDEN0006", "East Garden View", 35.00)      
  };
格式为ID、说明、价格


提前感谢

您可以使用for each循环迭代数组,并检查它是否匹配:

for (Room r : rooms) { 
    if (r.id.equals(REQUESTED_ID)) {
           //do something with it
    }
}
但是,如果阵列变大,您可能希望切换到更智能的数据结构,例如允许智能(快速)搜索的。

注意:您还需要覆盖
Room#equals()
Room#hashCode()
,以便使用
HashSet
,或类似的,您可以使用for each循环迭代数组,并检查它是否匹配:

for (Room r : rooms) { 
    if (r.id.equals(REQUESTED_ID)) {
           //do something with it
    }
}
但是,如果阵列变大,您可能希望切换到更智能的数据结构,例如允许智能(快速)搜索的。

注意:您还需要覆盖
Room#equals()
Room#hashCode()
,以便使用
HashSet
,或类似的,以下是一些代码,仅供您参考

for(Room room:rooms ){
if(room.getID().equals(userInput)){
 return room;
}
}

这里有一些代码只是给你一些想法

for(Room room:rooms ){
if(room.getID().equals(userInput)){
 return room;
}
}

您可以通过数组的
索引
访问/检索数组项

让我们说:

int[] x = new int[5];
x[2] = 4; // Access the 3rd element
第一个元素的索引总是从
0
开始,它被称为
base index

因此,如果数组的大小是3,那么所有元素的索引都是0,1,2

在这种情况下,您可以访问以下项目:

for(int i = 0 ; i < rooms.length ; i ++) {
    if(room.getID().equals(userInput)){
    //
    }
}

您可以通过数组的
索引
访问/检索数组项

让我们说:

int[] x = new int[5];
x[2] = 4; // Access the 3rd element
第一个元素的索引总是从
0
开始,它被称为
base index

因此,如果数组的大小是3,那么所有元素的索引都是0,1,2

在这种情况下,您可以访问以下项目:

for(int i = 0 ; i < rooms.length ; i ++) {
    if(room.getID().equals(userInput)){
    //
    }
}

数组是通过索引访问的。无法通过
ID
直接获取
房间
。 您可以循环浏览
房间
,然后选择正确的
房间
,如下所示:

private Room getRoomById(String id) {
    for (Object room : rooms) {
        if (room.getId == id) {
            return room;
        }
    }
    return null;
}

数组是通过索引访问的。无法通过
ID
直接获取
房间
。 您可以循环浏览
房间
,然后选择正确的
房间
,如下所示:

private Room getRoomById(String id) {
    for (Object room : rooms) {
        if (room.getId == id) {
            return room;
        }
    }
    return null;
}

数组是作业的错误工具。你所做的是给自己一个比你需要的更难的问题。我建议使用树形图将唯一的房间ID存储为键(Java字符串具有equals、hashcode和compareTo方法的正确实现),并将重构的房间实例存储为值

通过删除key字段来更改房间值对象,然后将其存储为TreeMap值,使用房间id(Java字符串)作为TreeMap键


通过使用TreeMap,无需在存储的房间中循环,您可以使用TreeMaps get(对象键)方法来检索所需的房间详细信息。

数组对于该作业来说是错误的工具。你所做的是给自己一个比你需要的更难的问题。我建议使用树形图将唯一的房间ID存储为键(Java字符串具有equals、hashcode和compareTo方法的正确实现),并将重构的房间实例存储为值

通过删除key字段来更改房间值对象,然后将其存储为TreeMap值,使用房间id(Java字符串)作为TreeMap键

通过使用树形映射,无需在存储的房间中循环,您可以使用树形映射get(Object key)方法检索所需的房间详细信息。

尽管您可以按照in的答案进行操作,并对其进行迭代,但我强烈建议您使用某种形式的映射。这就是它们的用途

Map<String, Room> rooms = new HashMap<>();
Room r = new Room("GARDEN0001", "NorthWest Garden View", 45.00);
rooms.put(r.getId(), r);
r = new Room("GARDEN0002", "SouthEast Garden View", 65.0);
rooms.put(r.getId(), r);
r = new Room("GARDEN0003", "North Garden View", 35.00);
rooms.put(r.getId(), r);
r = new Room("GARDEN0004", "South Garden View", 52.0);
rooms.put(r.getId(), r);
r = new Room("GARDEN0005", "West Garden View", 35.00);
rooms.put(r.getId(), r);
r = new Room("GARDEN0006", "East Garden View", 35.00);
rooms.put(r.getId(), r);

虽然您可以按照中的答案进行操作,并对它们进行迭代,但我强烈建议您使用某种形式的映射。这就是它们的用途

Map<String, Room> rooms = new HashMap<>();
Room r = new Room("GARDEN0001", "NorthWest Garden View", 45.00);
rooms.put(r.getId(), r);
r = new Room("GARDEN0002", "SouthEast Garden View", 65.0);
rooms.put(r.getId(), r);
r = new Room("GARDEN0003", "North Garden View", 35.00);
rooms.put(r.getId(), r);
r = new Room("GARDEN0004", "South Garden View", 52.0);
rooms.put(r.getId(), r);
r = new Room("GARDEN0005", "West Garden View", 35.00);
rooms.put(r.getId(), r);
r = new Room("GARDEN0006", "East Garden View", 35.00);
rooms.put(r.getId(), r);


如果您使用的是java8,可以这样做:

Arrays.stream(rooms).filter(room -> "YOUR_ID".equals(room.getId())).findFirst().get();

如果您使用的是java8,可以这样做:

Arrays.stream(rooms).filter(room -> "YOUR_ID".equals(room.getId())).findFirst().get();

您最好使用贴图而不是数组,并将id映射到房间对象。否则,只需迭代数组并检查每个要匹配的对象的Id。只需使用
[]
操作符?还是我误解了这个问题?@Mureinik数组的索引与对象的id不同您最好使用一个映射而不是数组,并将您的id映射到房间对象。否则,只需迭代数组并检查每个要匹配的对象的Id。只需使用
[]
操作符?还是我误解了这个问题?@Mureinik数组索引与object的id不一样。这不是一个好的解决方案-数组和集合是错误的数据结构。Map更合适。@Lrrr真的不同意,考虑到
Room
应该是一个不可变的对象。IMHO不是一个好的解决方案-数组和集合是该问题的错误数据结构。Map更合适。@Lrrr真的不同意,考虑到
Room
应该是一个不可变的对象。
(object Room:rooms)
->
getId
编译不太好,
Room.getId==id
->应该是
equals()
..
(object Room:rooms)
->
getId
编译不太好,
room.getId==id
->应该是
equals()
…为什么要将id存储为映射键并存储在room本身?这只是因为我假设他已经创建了room类,并将id用于其他事情。我如何创建getId()方法?我假设,根据
Room
构造函数的工作方式,您在
Room
类中有一个字段
私有字符串id
或类似的id。添加一个getter,如下所示:
public String getId(){return id}
为什么要将该id存储为映射键并存储在文件室本身?这只是因为我假设他已经创建了文件室类,并将该id用于其他事情。我如何创建一个getId()方法?我假设,从您的
房间
构造函数的工作方式来看,您有一个字段