按用户输入搜索2D ArrayList&;用Java显示行
我在一个相当简单的作业中遇到了一些问题,但在这里找不到一个似乎有效的答案 我需要有一个包含员工数据的2D ArrayList,然后能够运行一个单独的函数,该函数允许用户输入员工的姓名,搜索ArrayList中的姓名,如果该姓名存在,则显示整行数据 以下是到目前为止我得到的信息: ArrayList按用户输入搜索2D ArrayList&;用Java显示行,java,arraylist,Java,Arraylist,我在一个相当简单的作业中遇到了一些问题,但在这里找不到一个似乎有效的答案 我需要有一个包含员工数据的2D ArrayList,然后能够运行一个单独的函数,该函数允许用户输入员工的姓名,搜索ArrayList中的姓名,如果该姓名存在,则显示整行数据 以下是到目前为止我得到的信息: ArrayList List<List<String>> staffArrayString = new ArrayList<>(); staffArrayString.add(Arra
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"));
List statfArrayString=new ArrayList();
添加(Arrays.asList(“史蒂文·乔治”、“约克路12号”、“07123456678”、“永久”、“约克”、“27000/年”);
添加(Arrays.asList(“Rina Veyer”,“利兹路20号”,“08987987765”,“兼职”,“利兹”,“10/小时”);
staffArrayString.add(Arrays.asList(“Brian Lym”、“Bradford路13号”、“07123234345”、“永久”、“Bradford”、“27000/年”);
搜索功能
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) + " ");
}
}
public void staffNameSearch(){
System.out.println(“输入工作人员姓名:”);
字符串staffName=in.next();
布尔值=false;
int行=0;
对于(int i=0;i
目前,我在最后的打印行得到了“线程“main”java.lang.IndexOutOfBoundsException中的异常”的输出,但我一辈子都不知道为什么。我非常感谢任何关于这方面的建议(特别是如果我犯了一些明显而愚蠢的错误!)
j
th元素中有名称的行(变量i
)时,设置row=i
——这是不正确的;首选:
- a)
if(找到)
- b)
if(found==true)
&&!在for循环中找到
,以便在找到某个内容后立即退出j
th元素中有名称的行(变量i
)时,设置row=i
——这是不正确的;首选:
- a)
if(找到)
- b)
if(found==true)
&&!在for循环中找到
,以便在找到某个内容后立即退出您可以为每个循环使用,以简化操作
System.out.println("Enter name of staff member:");
String staffName = in.next();
boolean found = false;
String[] foundArray;
for(String[] staffArray: staffArrayString){
for(String str : staffArray){
if(str.equals(staffName)){
foundArray = staffArray;
found = true;
break;
}
}
}
if (found == true) {
System.out.print(foundArray + " ");
}
您可以为每个循环使用,以简化操作
System.out.println("Enter name of staff member:");
String staffName = in.next();
boolean found = false;
String[] foundArray;
for(String[] staffArray: staffArrayString){
for(String str : staffArray){
if(str.equals(staffName)){
foundArray = staffArray;
found = true;
break;
}
}
}
if (found == true) {
System.out.print(foundArray + " ");
}
通过使用Map和Staff类,您可能可以稍微简化代码 例如,Staff类
public class Staff{
String name;
String address;
String id; // ?
boolean permanent; // Or a enum if there are more than 2 values
String city; // ?
int payrate;
boolean hourly;
@Override
public String toString(){ // Easily convert the class to a String
return String.format("%s %s %s %s %s $%d/%s",
name,
address,
id,
permanent ? "Permanent" : "Part-time",
city,
payrate,
hourly ? "hr" : "yr");
}
}
让代码读取它
private Map<String, Staff> staffDirectory; // String is the name in lowercase
public void staffNameSearch() {
// Code
if(staffDirectory.containsKey(staffName)){ // Make sure staffName is lowercase
System.out.print(staffDirectory.get(staffName) + " ");
} else {
System.out.println("Name not found");
}
}
private Map staffDirectory;//字符串是小写的名称
public void staffNameSearch(){
//代码
如果(staffDirectory.containsKey(staffName)){//请确保staffName是小写的
System.out.print(staffDirectory.get(staffName)+“”);
}否则{
System.out.println(“未找到名称”);
}
}
这样可以避免使用循环并获得O(1)效率。通过使用Map和Staff类,您可以稍微简化代码 例如,Staff类
public class Staff{
String name;
String address;
String id; // ?
boolean permanent; // Or a enum if there are more than 2 values
String city; // ?
int payrate;
boolean hourly;
@Override
public String toString(){ // Easily convert the class to a String
return String.format("%s %s %s %s %s $%d/%s",
name,
address,
id,
permanent ? "Permanent" : "Part-time",
city,
payrate,
hourly ? "hr" : "yr");
}
}
让代码读取它
private Map<String, Staff> staffDirectory; // String is the name in lowercase
public void staffNameSearch() {
// Code
if(staffDirectory.containsKey(staffName)){ // Make sure staffName is lowercase
System.out.print(staffDirectory.get(staffName) + " ");
} else {
System.out.println("Name not found");
}
}
private Map staffDirectory;//字符串是小写的名称
public void staffNameSearch(){
//代码
如果(staffDirectory.containsKey(staffName)){//请确保staffName是小写的
System.out.print(staffDirectory.get(staffName)+“”);
}否则{
System.out.println(“未找到名称”);
}
}
这样可以避免使用循环并获得O(1)效率。哪一行引发异常?@Stewart抱歉,忘记指定了。这是搜索函数末尾的打印行,编辑后添加。通过将
System.out.print(“row==”+row+;“staffarrystring.length()=”+staffarrystring.length()
放在该行的前面进行调试。
这里是不是输入错误:for(int i=0;i<=staffarrystring.size();i++){
@ASutherland是的,是的……我发誓有一天我会学会打字……哪一行会引发异常?@Stewart抱歉,忘了指定。这是搜索函数末尾的打印行,经过编辑添加它。通过放入System.out.print(“row==”+row+”;staffarrystring.length()==“+staffarrystring.length()进行调试
就在那一行之前。<=/code>这里是打字错误吗:for(int i=0;i<=staffarrystring.size();i++){
@ASutherland是的,它是……我发誓有一天我会学会打字的……谢谢,这很好!另外还要感谢你注意到缺少的等号,我偶尔还是会犯错误。谢谢,这很好!另外还要感谢你注意到缺少的等号,我仍然会犯错误谢谢你的建议!我一定会考虑在将来使用类似的东西,它看起来更简单、更高效!谢谢你的建议!我一定会考虑在将来使用类似的东西,它看起来更简单、更高效!