2016-11-02 2 views
0

Когда я запускаю следующий код, он печатает только «year \ tposition \ tname \ tMonthlySalary \ tAnnualSales \ tStockPrice», а не информацию, хранящуюся в data.txt. Он также не вычисляет среднее значение2014 и average2015. Я использовал NetBeans для этого кода и не видел никаких ошибок.вызов текстового файла в java

data.txt имеет

2014 Сотрудник Смит, Джеймс 2000

2014 Salesman Джонсон, Мэри 3500 10000

2014 Исполнительный Уильямс, Роберт 2800 25

2015 Сотрудник Джонс, Барбара 4000

2015 Продавец Браун, Уильям 3700 5000

2015 Исполнительный Дэвис, Дженнифер 2600 51

2014 Сотрудник Миллер, Ричард 3900

2014 Salesman Wilson, Susan 4200 7000

2014 Исполнительный Мур, Джозеф 1900 65

2015 Сотрудник Тейлор, Дороти 3700

2015 Salesman Андерсон, Кристофер 3200 15000

2015 Исполнительный Томас, Nancy 4400 33

class Employee{ 
private String year; 
private String name; 
private String position; 
private double monthlySalary; 
public Employee(String year, String position, String name, double monthlySalary){ 
    this.year = year; 
    this.position = position; 
    this.name = name; 
    this.monthlySalary = monthlySalary; 
} 
public double annualSalary(){ 
    return monthlySalary*12; 
} 
public String toString(){ 
    return year+"\t"+position+"\t"+name +"\t" + monthlySalary +"\t"; 
} 
}class Salesman extends Employee{ 
private double annualSales; 

public Salesman(String year, String position, String name, double monthlySalary, double annualSales){ 
    super(year, position, name, monthlySalary); 
    this.annualSales = annualSales; 
} 

public double annualSalary(){ 
    double commission = this.annualSales*0.2; 
    if(commission>20000){ 
     commission = 20000; 
    } 
    return super.annualSalary()+commission; 
} 
public String toString(){ 
    return super.toString()+annualSalary(); 
} 
}class Executive extends Employee{ 
private double stockPrice; 
public Executive(String year, String position, String name, double monthlySalary, double stockPrice){ 
    super(year, position, name, monthlySalary); 
    this.stockPrice = stockPrice; 
} 
public double annualSalary(){ 
    double bonus=0; 
    if(this.stockPrice>50){ 
     bonus = 30000; 
    } 
    return super.annualSalary() + annualSalary(); 
} 
public String toString(){ 
    return super.toString()+"\t"+ this.stockPrice+"\n"; 
} 

} 

class TestEmployee { 
ArrayList<Employee> employee2014 = new ArrayList<Employee>(); 
ArrayList<Employee> employee2015 = new ArrayList<Employee>(); 

public void MakeArray(){ 
    try{ 
     Scanner sc = new Scanner(new File("data.txt")); 
     while(sc.hasNext()){ 
      String year = sc.nextLine(); 
      String[] data = year.split(" "); 
      if(data[0] == "2014"){ 
       if(data[1].equalsIgnoreCase("Employee")){ 
        employee2014.add(new Employee(data[0],data[1],data[2],Double.parseDouble(data[3]))); 
       }else if(data[1].equalsIgnoreCase("Salesman")){ 
        employee2014.add(new Salesman(data[0],data[1],data[2],Double.parseDouble(data[3]),Double.parseDouble(data[4])));     
       }else if(data[1].equalsIgnoreCase("Executive")){ 
        employee2014.add(new Executive(data[0],data[1],data[2],Double.parseDouble(data[3]),Double.parseDouble(data[4])));      
       } 
      }if(data[0] == "2015"){ 
       if(data[1].equalsIgnoreCase("Employee")){ 
        employee2015.add(new Employee("2015",data[1],data[2],Double.parseDouble(data[3]))); 
       }else if(data[1].equalsIgnoreCase("Salesman")){ 
        employee2015.add(new Salesman("2015",data[1],data[2],Double.parseDouble(data[3]),Double.parseDouble(data[4])));     
       }else if(data[1].equalsIgnoreCase("Executive")){ 
        employee2015.add(new Executive("2015",data[1],data[2],Double.parseDouble(data[3]),Double.parseDouble(data[4])));      
       } 
      } 
     }  
    }catch(FileNotFoundException nf){ 
     System.out.println("File not found"); 
    } 
}public void Result(){ 
    double average2014=0; 
    double total2014=0; 
    double average2015=0; 
    double total2015=0; 
    System.out.print("Data of 2014:\n" 
      + "Year\tPosition\tName\tMonthlySalary\tAnnualSales\tStockPrice"); 
    for(Employee employee14: employee2014){ 
     System.out.println(employee14.toString()); 
     total2014 +=employee14.annualSalary(); 
    }average2014 = total2014/employee2014.size(); 
    System.out.print("\nThe average annual salary of 2014 is " + average2014+"\n"); 
    System.out.println("=================================="); 

    System.out.print("Data of 2015:\n" 
      + "Year\tPosition\tName\tMonthlySalary\tAnnualSales\tStockPrice"); 
    for(Employee employee15: employee2015){ 
     System.out.println(employee15.toString()); 
     total2015 +=employee15.annualSalary(); 
    }average2015 = total2014/employee2015.size(); 
    System.out.print("\nThe average annual salary of 2015 is " + average2015+"\n"); 
} 
public static void main(String[] args){ 
    TestEmployee te = new TestEmployee(); 
    te.MakeArray(); 
    te.Result(); 
} 

}

ответ

0

В методе «MakeArray» (первая буква методов должны быть в нижнем регистре для конвенции), вы должны использовать метод равно вместо «==» оператор:

if(data[0] == "2014") --> if(data[0].equals("2014")) 
if(data[0] == "2015") --> if(data[0].equals("2015")) 

Fix также annualSalary() (в классе Executive) метод следующим образом:

public double annualSalary(){ 
    double bonus=0; 
    if(this.stockPrice>50){ 
     bonus = 30000; 
    } 
    return super.annualSalary() + bonus; 
} 
Смежные вопросы