我在完成一项相当简单的作业时遇到了一些麻烦,但在这里找不到似乎有效的答案。
我需要一个包含员工数据的 2D ArrayList,然后能够运行一个单独的函数,允许用户输入员工的姓名,在 ArrayList 中搜索该姓名,如果存在,则显示完整的信息数据行。
这是我到目前为止所得到的:
数组列表
List<List<String>> staffArrayString = new ArrayList<>();
staffArrayString.add(Arrays.asList("Steven George", "12 York Road", "07123456678", "Permanent", "York", "27000/yr"));
staffArrayString.add(Arrays.asList("Rina Veyer", "20 Leeds Road", "08987987765", "Part Time", "Leeds", "10/hr"));
staffArrayString.add(Arrays.asList("Brian Lym", "13 Bradford Road", "07123234345", "Permanent", "Bradford", "27000/yr"));
搜索功能
public void staffNameSearch() {
System.out.println("Enter name of staff member:");
String staffName = in.next();
boolean found = false;
int row = 0;
for (int i = 0; i < staffArrayString.size(); i++) {
for (int j = 0; j < staffArrayString.get(i).size(); j++) {
if (staffArrayString.get(i).get(j).equals(staffName)) {
row = staffArrayString.get(i).size();
found = true;
}
}
}
if (found = true) {
System.out.print(staffArrayString.get(row) + " ");
}
}
我目前在最后的打印行处得到“线程“main”java.lang.IndexOutOfBoundsException 中的异常”的输出,但我一生都无法找出原因。我将不胜感激任何对此的建议(特别是如果这是我的一些明显且愚蠢的错误!)。
最佳答案
发生错误的原因是您将 row 设置为与行计数器无关的内容。当您发现名称在
i
中的行(变量j
)时第一个元素,设置row=i
.小心
if (found = true)
- 这是不正确的;更喜欢:- a)
if (found)
- b)
if (found == true)
- a)
为了提高效率,请包括
&& !found
在 for 循环中,因此一旦您找到某些内容,它们就会退出。
关于java - 通过用户输入搜索2D ArrayList并在Java中显示行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48471691/