2015-11-09 2 views
-1

Я пытаюсь упростить проект, над которым я работал, и ударил стену. Цель состоит в том, чтобы получить входной файл .txt и ввести его в массив на основе типов сотрудников. Затем возьмите эти данные и вычислите зарплату (расчеты, обработанные в других классах для каждого типа), и выведите информацию и среднюю зарплату за этот год. Мне говорят, что я помещаю только один тип (Executive) в массив в этом коде, но я не вижу в этом методе ничего другого, кроме остальных.Учимся работать с массивами в Java

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.Scanner; 
import java.text.DecimalFormat; 

public class Salaries{ 
    public static void main(String[] args) throws FileNotFoundException{ 
    final DecimalFormat Currency = new DecimalFormat("$0,000.00"); 
    final DecimalFormat Percentage = new DecimalFormat("0.00%"); 
    String fileName = "data1.txt"; 
    Scanner fileScanner; 
    int count2014=0; 
    int count2015=0; 
Employee [] data2014 = new Employee[10]; 
Employee [] data2015 = new Employee[10]; 
    try{ 
    fileScanner=new Scanner(new File(fileName)); 
     while(fileScanner.hasNextLine()){ 
      String nextEmployee = fileScanner.nextLine(); 
      String[]data=(nextEmployee.split(" ")); 
      Employee employee = null; 
       if (data[1].equals ("Employee")){ 
        String name=data[2]; 
        double salary=Double.parseDouble(data[3]); 
       if (data[0].equals("2014")){ 
        employee=new Employee(name, salary); 
        employee=data2014[2]; 
        count2014++; 
       } 
       else{ 
        employee=new Employee(name,salary); 
        employee=data2015[2]; 
        count2015++; 
       } 
      } 
      else if (data[1].equals ("OnCommission")){ 
        String name=data[2]; 
        double salary=Double.parseDouble(data[3]); 
        double commission=Double.parseDouble(data[4]); 
        double sales=Double.parseDouble(data[5]); 
       if (data[0].equals("2014")){ 
        data2014[count2014]=new EmployeeOnCommission(name, salary, commission, sales); 
        count2014++; 
       } 
       else{ 
        data2015[count2015]=new EmployeeOnCommission(name,salary, commission, sales); 
        count2015++; 
       } 
      } 
      else if (data[1].equals ("Executive")){ 
        String name=data[2]; 
        double salary=Double.parseDouble(data[3]); 
        double stock=Double.parseDouble(data[4]); 
       if (data[0].equals("2014")){ 
        data2014[count2014]=new Executive(name, salary, stock); 
        count2014++; 
       } 
       else{ 
        data2015[count2015]=new Executive(name, salary, stock); 
        count2015++; 
       } 
      } 
     } 
} 
catch (FileNotFoundException | NumberFormatException e){ 
    System.out.println(e); 
} 



    double avgOf2014=0; 
//Results of the 2014 year employees data 
    System.out.println("Year - 2014 : "); 
    for(int i = 0; i < count2014; i++){ 
     System.out.print(data2014[i].toString()+ 
     " Annual Salary: " +data2014[i].annualSalary()); 
     avgOf2014+=data2014[i].annualSalary(); 
    }  
    //average of 2014 salaries 
    System.out.println("Average of 2014 salaries: " 
       +Currency.format(avgOf2014/(count2014))); 

}}

ответ

0

Вы не можете хранить два различных типа объектов на одном массиве. Если ваш исполнительный класс не расширяет Employee.

Вы все еще не может сделать это:

ChildClass[] child = new ChildClass[10]; 
ParentClass[] parent = child; 
parent[0]=new ParentClass(); 

Вы должны сделать это:

ChildClass[] child = new ChildClass[10]; 
ParentClass[] parent = child; 
parent[0]=new ChildClass(); 

Я также заметил, что вопрос с кодом ниже,

if (data[0].equals("2014")){ 
    employee=new Employee(name, salary); 
    employee=data2014[2]; 
    count2014++; 

В приведенный выше код кода, вы создаете новый объект Employee, а затем сразу же перезаписываете его ссылку на data2014 [2]. Вы должны заменить его на:

if (data[0].equals("2014")){ 
    employee=new Employee(name, salary); 
    data2014[count2014] = employee; 
    count2014++; 
+0

Исполнительный фактически расширяет Employee. Я тоже могу опубликовать эти классы, если это поможет. Я старался не заставлять других работать для меня, просто назовите меня в правильном направлении. – dsmracr29

+0

Спасибо! Этот совет работал отлично. Имеет смысл, почему я видел NullPointerExceptions. Я переписывал ссылки. – dsmracr29

Смежные вопросы