2015-11-12 2 views
-3

Может кто-нибудь попытается запустить эту программу и помочь мне разобраться, почему она кажется действительно запутанной, потому что не только есть ошибка времени выполнения, но и проблема с ответом на подсказку. Я понятия не имею, что делать или что я сделал неправильно. У меня нет ошибок компиляции, только проблемы при запуске программы. В частности, ошибка времени выполнения. Любая помощь будет действительно оценена. Спасибо!Как сделать мою программу java правильно запущенной и исправить ошибку времени выполнения?

Сама программа должна подсказывать 10 сотрудников за их

last name 

what time they started their work 

(Время должно вводится час, затем минуту в военное время. Для напр., Если они начнут работу в 2:20 пользователем должен вводить 14 для часа и 20 для минуты).

what time they finished work 

(также отформатировано как время начала).

Я предполагаю, что все данные введены правильно, что работник закончил работу после того, как они начали, и что оба раза за тот же день.

Программа определит, сколько часов каждый сотрудник работал в этот день.

Он будет выводить хорошо отформатированный отчет, содержащий список `

all of the employees 

along with the amount of time they worked 

(перечислены в часах и минутах),

также он должен выводить

the average amount of time worked 

their last name 

Это то, что я написал -

import java.util.Scanner; 

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

     String[] empLastName={""}; 
     int[] workStartTime={0}, workEndTime={0}, totalTimeWorked={0}, hoursWorked={0}; 
     double[] avgHoursWorked={0}; 
     String[] empLastNameArray= new String[10]; 
     int[] workStartTimeArray= new int[10]; 
     int[] workEndTimeArray= new int[10]; 
     double[] avgHoursWorkedArray= new double[0]; 
     readEmployeeData(empLastName, workStartTime, workEndTime); 
     determineHoursWorked(workStartTime, workEndTime, totalTimeWorked); 
     determineAverageHoursWorked(workStartTime, workEndTime, totalTimeWorked); 
     writeHeadings(); 
     printEmployeeInformation(empLastName, workStartTime, workEndTime); 
    } 

    public static void readEmployeeData(String[] empLastName, int[] workStartTime, int[] workEndTime) 
    { 

     System.out.println("enter how many students you would like to get the information"); 


     Scanner input = new Scanner(System.in); 
     for(int i=0; i<10; i++) 
     { 
      System.out.println("Please enter your last name."); 
      empLastName[i]=input.next(); 
      System.out.println("Please enter your work start time."); 
      workStartTime[i]=input.nextInt(); 
      System.out.println("Please enter your work end time."); 
      workEndTime[i]=input.nextInt(); 
     } 
    } 

    public static int[] determineHoursWorked(int[] workStartTime, int[] workEndTime, int[] totalTimeWorked) 
    { 
     int[] hoursWorked= new int[10]; 
     for(int i=0; i<hoursWorked.length; i++) 
      hoursWorked[i]= workEndTime[i]-workStartTime[i]; 
     for(int i=0; i<hoursWorked.length; i++) 
     { 
      totalTimeWorked[0]=totalTimeWorked[0]+hoursWorked[i]; 
     } 
     return hoursWorked; 
    } 

    public static double[] determineAverageHoursWorked(int[] workStartTime, int[] workEndTime, int[] totalTimeWorked) 
    { 
     double[] avgHoursWorked= new double[10]; 
     for(int i=0; i<avgHoursWorked.length; i++) 
      avgHoursWorked[0]= ((totalTimeWorked[0])/10); 
     return avgHoursWorked; 
    } 

    public static void writeHeadings() 
    { 
     System.out.printf("%s%25s%13s%16s\n\n", "Employees", "Amount of time worked", "Average amount of time worked"); 
    } 

    public static void printEmployeeInformation(String[] empLastName, int[] hoursWorked, int[] avgHoursWorked) 
    { 
     for(int i=0; i<empLastName.length; i++) 
      System.out.printf("%-20s%9d%13.2f%16.2f\n", empLastName[i], hoursWorked[i], avgHoursWorked[i]); 
    } 
} 
+0

Может кто-то также объяснить, почему я зашел за этот вопрос? Я честно смущен, что случилось с тем, как я это сформулировал. – Rachel

+1

Ну, это длинный вопрос, и, например, в вашем коде, вы задаетесь вопросом, почему он не работает, но у вас есть строки, которые выглядят как 'String [] empLastNameArray = new String [empLastNameArray.length];' Это проблема потому что как вы получаете длину этой переменной, как вы ее назначаете? –

+2

Поскольку вопросы, требующие помощи по отладке («почему этот код не работает?») Должны включать в себя желаемое поведение ** конкретную проблему или ошибку ** и ** кратчайший необходимый код **, чтобы воспроизвести его в самом вопросе. Вопросы без четкого описания проблемы не полезны другим читателям. См. [Как создать минимальный, завершенный и проверяемый пример] (http://stackoverflow.com/help/mcve). – Andreas

ответ

0

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

В любом случае, вот перепись начала того, что вы пытались выполнить. Надеюсь, вы научитесь этому.

import java.util.ArrayList; 
import java.util.List; 
import java.util.Scanner; 

class Employee { 
    String lastName; 
    int workStartTime; 
    int workEndTime; 

    public Employee() { } 
} 

public class EmployeeTime { 

    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 

     System.out.println("enter how many students you would like to get the information"); 
     int numberStudents = input.nextInt(); 

     List<Employee> employees = readEmployeeData(numberStudents); 

     System.out.printf("%s\t%s\t%s\n\n", "Employees", "Amount of time worked", "Average amount of time worked"); 
     printEmployeeInformation(employees); 
    } 

    public static List<Employee> readEmployeeData(int numEmployees) { 
     Scanner input = new Scanner(System.in); 
     List<Employee> employees = new ArrayList<Employee>(); 

     for(int i=0; i<numEmployees; i++) { 
      Employee e = new Employee(); 

      System.out.printf("[%d] Please enter your last name: ", i); 
      e.lastName =input.next(); 

      System.out.printf("[%d] Please enter your work start time: ", i); 
      e.workStartTime=input.nextInt(); 

      System.out.printf("[%d] Please enter your work end time: ", i); 
      e.workEndTime=input.nextInt(); 

      employees.add(e); 
      System.out.println(); 
     } 

     return employees; 
    } 

    public static int determineHoursWorked(Employee e) { 
     return Math.abs(e.workEndTime - e.workStartTime); 
    } 

    public static void printEmployeeInformation(List<Employee> employees) { 
     for(int i=0; i<employees.size(); i++) { 
      Employee e = employees.get(i); 
      System.out.printf("%-8s\t%21d\t%16.2f\n", e.lastName, determineHoursWorked(e), 0.0); 
     } 
    } 
} 
Смежные вопросы