2014-10-17 3 views
0

У меня возникли проблемы с получением моего кода для суммирования всех зарплат текстового файла. Предполагается, что они будут суммировать их всех, а также дать мне среднюю зарплату. Также у меня возникают проблемы с получением правильной форматирования одной из строк на выходе. Пожалуйста, помогите, я все еще очень новичок в программировании! Вот моя главная.printf и чтение текстового файла

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

public class fileIn 
{ 

    public static void main(String[] args) 
    { 

     String fName; 
     String lName; 
     String rank; 
     double salary = 0; 
     double newSal = 0; 
     Scanner inFile = null; 
     Employee[] emp = new Employee[20]; 
     int numEmployee = 0; 

     // open the file 
     try 
     { 
      inFile = new Scanner(new File("employee.txt")); 
     } catch (FileNotFoundException e) 
     { 
      System.err.println("Error: File employee.txt not found "); 
     } 

     while (inFile.hasNext()) 
     { 

      fName = inFile.next(); 
      lName = inFile.next(); 
      rank = inFile.next(); 
      newSal = inFile.nextDouble(); 
      salary += newSal; 
      emp[numEmployee] = new Employee(fName, lName, rank, salary); 
      numEmployee++; 

     } 

     System.out.println("Acme Corporation \n"); 
     System.out.printf("Number Of Employees: %5d ", numEmployee); 
     System.out.printf("\nAverage Salary: %13.2f", salary/numEmployee); 
     System.out.printf("\nAnnual Total %16.2f", salary); 

     System.out.printf("\n\n%-8s %15s %10s", "Name", "Rank", "Salary\n"); 

     for (int i = 0; i < numEmployee; i++) 
     { 
      System.out.printf("%s, %s \t%7s %11.2f\n", emp[i].getlName(), 
        emp[i].getfName(), emp[i].getRank(), emp[i].getSalary()); 

     } 
     inFile.close(); 
    } 

} 

и вот пример вывода:

Acme Corporation 

Number Of Employees:  9 
Average Salary:  58740.50 
Annual Total   528664.54 

Name    Rank Salary 
------------------ ---- --------- 
Jones, William  B2 42500.00 
Baker, Susan   A3 107500.00 
Caine, Horatio  A1 191268.95 
Baer, Teddy   B4 244268.95 
Gator, Allie   A2 292268.95 
Mander, Sally  A1 354392.84 
Aspargus, Amy  A1 454442.84 
Huckleberry, Henry   B1 495677.34 
Rutabaga, Ryan  B2 528664.54 

Средняя заработная плата и общий годовой совершенно неправильно, общее должно быть более 2 миллионов, а средняя зарплата должна быть примерно 300k. СПАСИБО!!

+1

Как выглядит файл, который вы читаете? сканеры 'next()' читают целые строки, что может быть не так, как вы хотите – Felk

+0

Текстовый файл выглядит так же, как и вывод, только не отформатированный. Между именами, рангом и зарплатой есть пробелы. –

+0

Тогда весь файл - 1 строка, и данные просто разделяются пробелами? Затем вам нужно будет прочитать весь файл в строке и получить доступ к частям, разделив его на массив в пространствах: 'String [] parts = string.split (" ");' – Felk

ответ

0

Похоже, вы назначая cummulative зарплату каждому новому сотруднику-вход:

emp[numEmployee] = new Employee(fName, lName, rank, salary); 

Не должно ли это быть?

emp[numEmployee] = new Employee(fName, lName, rank, newSal); 
+0

Большое вам спасибо! Любые мысли о том, как исправить форматирование для Генри Гекльберри? –

+0

Добро пожаловать. Может быть, вы можете отслеживать самое длинное имя в вашем цикле while и настраивать формат для этого? Что-то вроде 'int max_length; int length = fName(). length() + lName(). length(); if (length> max_length) max_length = length; '? Или, если вы уверены, что имена не превысят определенного количества символов, вы можете сделать фиксированную ширину немного больше. Эта тема может быть интересной: [форматирование-отлично-с-printf-in-java] (http://stackoverflow.com/questions/14421674/formatting-perfectly-with-printf-in-java). – Parsijn

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