2016-03-03 42 views
1

在我的面向对象的编程课程中,我有一项任务,它要求我开发一个java代码,用于在使用来自a.txt的信息时打印假公司的工资信息。 txt文件。我能够打印出员工的姓名和所有内容,但是我在理解如何获得平均薪水方面遇到了一些麻烦,我已经开始采用这种方法,并且在代码如下。任何帮助,将不胜感激。当从.txt文件获取信息时,发现平均值和总数

Employee类:

public class Employee { 
    private String firstName; 
    private String lastName; 
    private String rank; 
    private double salary; 

    public Employee(String firstName, String lastName, String rank, double salary) { 
     super(); 
     this.firstName = firstName; 
     this.lastName = lastName; 
     this.rank = rank; 
     this.salary = salary; 
    } 
    public String getFirstName() { 
     return firstName; 
    } 
    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 
    public String getLastName() { 
     return lastName; 
    } 
    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 
    public String getRank() { 
     return rank; 
    } 
    public void setRank(String rank) { 
     this.rank = rank; 
    } 
    public double getSalary() { 
     return salary; 
    } 
    public void setSalary(double salary) { 
     this.salary = salary; 
    } 
} 

prog5类:

import java.util.*; 
import java.io.*; 

public class Prog5 { 
    public static void main(String[] args) { 

     String firstName = null; 
     String lastName = null; 
     String rank = null; 
     double salary = 0.0; 
     Scanner inFile = null; 
     Employee[] arr = new Employee[99]; 
     int num = 0; 

     try { 
      inFile = new Scanner(new File ("c:\\Users\\admin\\workspace\\Shumaker5\\src\\employees.txt")); 
     } 
     catch(FileNotFoundException e) { 
      System.err.println(" File not found"); 
      System.exit(1); 
     } 

     //read file 
     while(inFile.hasNext()) { 
      try { 
       firstName = inFile.next(); 
       lastName = inFile.next(); 
       rank = inFile.next(); 
       salary = inFile.nextDouble(); 
      } 
      catch(InputMismatchException e) { 
       System.err.println("File format error"); 
       System.exit(1); 
      } 

      Employee emp = new Employee(firstName, lastName, rank, salary); 
      arr[num] = emp; 
      num++; 

      /** 
      * method to calculate average 
      * @param temperatures 
      * @param counter 
      * @return 
      */ 
     /** public static double average(double[] salary, int num) 
      { 
       double sum = 0; 
       for(int t = 0; t < num; t++) 
      { 
        sum += salary[t]; 
      } 
       return (double) sum/num; 
      } */ 

      System.out.println(emp); 
     } 
     System.out.println(); 
     System.out.println("Wayne Industries"); 
     System.out.println(); 
     System.out.println("Number of Employees: " + num); 
     System.out.println("Average Salary: "); 
     System.out.println("Annual Total: "); 
     System.out.println(); 
     System.out.printf("%-15s %-15s %-6s %-8s \n", "Last Name", "First Name", "Rank", "Salary"); 
     System.out.println(); 

     for(int x = 0; x < num; x++) { 
      System.out.printf("%-15s %-15s %-6s %-8.2f\n", arr[x].getLastName(), 
        arr[x].getFirstName(), arr[x].getRank(), arr[x].getSalary()); 
     } 
     inFile.close(); 
    } 
} 
+0

您能指出哪里有问题吗?当你有一个具体的问题,你应该避免只是把你所有的代码... – Maljam

+0

我说问题领域被注释掉了。它在编类 – theshu

回答

0

我怀疑你需要先检索薪水为一个字符串,然后用双提取双(如: parseDouble(工资))。希望这可以帮助!

0

你非常接近。我们只需要传递员工数组(而不是他们的薪水)并计算方法中的平均值。下面提供了一个示例:

public static double average(Employee[] employees){ 
     double sum = 0; 
     for(int t = 0; t < employees.length; t++){ 
      sum += employee[t].getSalary(); 
     } 
     return (double) sum/employees.length; 
    } 
+0

Thankyou这么多。这是我第一次使用一个文本文件,所以我有点失去了这有助于immensley – theshu

+0

我仍然收到两个错误更新后的代码,在返回声明我得到void方法不能返回一个值。并在公共静态双线上表示非法修饰符为变量平均值;只有最后才允许 – theshu

+0

您可能会将该方法粘贴到错误的地方。你能确保这种方法不被粘贴到现有的方法中吗? –