private static boolean isValid(String content, char delimiter, int count) {
return count == content.chars().filter(c -> c == delimiter).count();
}
BufferedReader inputStream = null;
String fileLine;
int employeeCount = 1;
String[] years = new String[2];
//Employee[] employees = new Employee[employeeCount + 1];
List<Employee> employees = new ArrayList<>();
File myFile = new File("src/project1/data.txt");
//System.out.println("Attempting to read from file in: "+ myFile.getCanonicalPath());
try {
FileInputStream fstream = new FileInputStream(myFile);
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
while ((strLine = br.readLine()) != null) {
String[] data = strLine.split(" ");
//while ( int i < employees.length ) {
for (int i=1; i < employees.size(); i++ ) {
if (data[1].equals("Executive")) {
employees.add( new Executive(data[0],data[1],data[2], Integer.parseInt(data[3]), Integer.parseInt(data[4])) );
} else if (data[1].equals("Salesman")) {
employees.add( new Salesman(data[0],data[1],data[2], Integer.parseInt(data[3]), Integer.parseInt(data[4])) );
} else {
employees.add( new Employee(data[0],data[1],data[2], Integer.parseInt(data[3])) );
}
//System.out.println(employees[i].toString());
System.out.println(i +" " + employeeCount);
employeeCount++;
}
}
for (int y=1; y < employees.size(); y++ ) {
System.out.println(employees.get(y).getName());
}
//System.out.println(employees.toString());
} catch (IOException io) {
System.out.println("File IO exception" + io.getMessage());
}
按预期递增,但EmployeeCount
始终为1 - 我在这里缺少什么?使用while循环逐行读取textfile - for循环检查第二个数据是否与字符串匹配并在匹配时创建对象库。我在这里有道理吗?
答案 0 :(得分:0)
for循环没有递增,因为在第一次迭代后条件为false:
for (int i=1; i < employees.length; i++ ) {
即employees.length
为2,因为employeeCount
是此行的一个(我必须假设,因为代码不完整):
Employee[] employees = new Employee[employeeCount + 1];
这一行创建了一个数组,其中employeeCount + 1
为2,因此有两个位置。当employeeCount
递增时,大小不会自动调整...
我建议使用List而不是数组,因为List会根据需要进行扩展:
List<Employee> employees = new ArrayList<>();
...
employees.add(new Employee(...));