我必须编写一个程序,用于保存10名员工的信息(员工编号,姓氏,名字,职位,薪资,百分比出勤率,休闲叶数和剩余病叶数)(employeeDetailsStrings) )由格式为
的#
分隔
E101#John #Wills#Software Engineer#40000#78#25#12 。
系统应允许用户根据其姓氏或员工编号搜索员工,然后显示与该员工相对应的所有详细信息。如果找不到员工,系统应该给出错误信息。 该程序使用一个数组来保存10名员工的详细信息。
这是我到目前为止所得到的:
import java.util.*;
public class labsheets {
public static void main(String args[]){
Scanner sc= new Scanner(System.in);
String[] empDetString= new String[10];
String input;
int i;
System.out.println("Enter emp details: ");
for (i=0; i<empDetString.length; i++){
empDetString[i]= sc.nextLine();
empDetString[i].split("#");
}
}
我不知道如何拆分由标签分隔的这10个员工详细信息中的每一个,显然我的方法是错误的。 通过员工编号或姓氏找到匹配后,输出应如下所示。
输出
Employee Number is : E101
Surname : Wills
First Name : John
Position : Software Engineer
Salary : 40000
% Attendance : 78
Casual Leaves left : 25
Sick Leaves left : 12
答案 0 :(得分:1)
因为你有这个大小为2的数组。
String[] empDetString = new String[2];
您应该添加大于2的大小,因为该数组不会自动递增。 为此,当你尝试这样做时。
System.out.println("First name: " + empDetString[i + 2]);
您有java.lang.ArrayIndexOutOfBoundsException
。
答案 1 :(得分:1)
您正在访问范围之外的项目,例如此行
empDetString[i+1]
封装在此循环中
for(i=0;i<empDetString.length;i++){
不可避免地,您的i
将超过数组的大小。
要解决此问题,因为您的上一次通话是empDetString[i+7]
,请确保限制您的for循环,如下所示:
for(i = 0; i < empDetString.length - 7; i++){
修改强>
此外,if
语句中没有大括号。只有那之后的第一行才会被封装在条件中。
最后,您没有为split()
指定返回值。尝试类似:
String[][] empDetString= new String[2][10];
String input;
int i;
System.out.println("Enter emp details: ");
for (i=0; i<empDetString.length; i++){
empDetString[i]=sc.nextLine().split("#");
}
之后您可以访问:
for(i=0;i<empDetString.length;i++){
if(input.equals(empDetString[i][0])) {
System.out.println("Employee number:"+ empDetString[i][0]);
System.out.println("Surname: "+ empDetString[i][1]);
System.out.println("First name: "+empDetString[i][2]);
System.out.println("Position: "+empDetString[i][3]);
System.out.println("Salary: "+empDetString[i][4]);
System.out.println("% Attendance: "+empDetString[i][5]);
System.out.println("Casual Leaves Left: "+empDetString[i][6]);
System.out.println("Sick leaves left: "+empDetString[i][7]);
break;
}
}