1

我有一个包含员工信息的文本文件。第一个单词是员工的姓氏,第二个单词是名字。字符代码 h 或 s 告诉我他们是什么类型的员工,有薪或按小时计酬。最后,字符代码后面的数字是小时工资(如果是小时工)或年薪(如果是受薪员工)。

Smith, John   h   5.00
Potter, Harry   s   10000

我想用这些信息做的是扫描文本文件以根据识别的字符代码自动创建一个新的受薪员工对象或每小时员工对象。

这些是每小时雇员对象的参数。

public HourlyEmployee(String first, String last, double wage)

这就是我想出的。

File input = new File("EmployeesIn.txt"); 
Scanner in = new Scanner(input);


while(in.hasNextLine()) {
    int i = 1;
    String line =(in.nextLine());
    if (line.contains(" h ")) {
        HourlyEmployee Employee1 = new HourlyEmployee(in.next(),in.next(),in.nextDouble());
        System.out.println(Employee1);  

这段代码的问题是我从 in.nextDouble(); 中得到了 InputMismatchException。

所以我编辑了我的代码以手动将工资分配给 1 以至少查看它是否正确分配了姓氏和名字,但它甚至没有正确地做到这一点。它使用错误的行来分配值,并将 First Name 分配为姓氏,将 Last Name 分配为名字。

Harry, Potter,  $1.0/hour

所以我的问题是,我该如何正确地做到这一点?根据我提供的文本文件,我想使用这些参数创建一个 HourlyEmployee 对象

HourlyEmployee Employee1 = new HourlyEmployee(Smith,John,5.00);
4

2 回答 2

0

两个明显的问题:

由于您按顺序读取文件,因此您首先读取的是姓氏;但您HourlyEmployee需要的第一个参数是名字。其次,您第三次尝试读取文件最终会读取 'h' 或 's' 标志,而不是支付。解决方法:分别读入名称,然后调用函数。像这样的东西:

while(in.hasNextLine()) {
  lastName = in.next();
  firstName = in.next();
  payType = in.next(); // read the 'h' or 's'
  pay = in.nextDouble();
  switch(payType) {
    case 'h': 
      Employee1 = new HourlyEmployee(firstName, lastName, pay);
      break;
    case 's':
      Employee1 = new SalariedEmployee(firstName, lastName, pay);
      break;
    default:
      // warn about invalid format
  }
  System.out.println(Employee1);  
}

您可能需要从变量中删除逗号lastName- 不确定您的函数是否已经处理了这一点。

于 2013-09-14T19:14:27.260 回答
0

为什么只加载文件并逐行读取?

由于您的文件结构 - 相同,因此很容易解析/分割每一行

public static String loadFile(String filePath){



    try {           

        // Open the file that is the first command line parameter
        FileInputStream fstream = new FileInputStream(filePath);
        BufferedReader br = new BufferedReader(new InputStreamReader(fstream));

        String strLine = null;

        //Read File Line By Line
        while ((strLine = br.readLine()) != null  )   {

                            if(strLine.split("[ ]+").length > 3){
                               // do stuff here
                             }

        }// end while

        //Close the input stream            
        br.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    return buff.toString();
}
于 2013-09-14T19:18:04.763 回答