У меня проблемы с программой, пропускающей первый вход при цикле. Пожалуйста помоги - PullRequest
0 голосов
/ 22 февраля 2011

Хорошо, поэтому мне пришлось изменить мою уже работающую программу, чтобы использовать 2 отдельных класса ... один для выполнения задачи и один для хранения информации.Как только он выполняет первый расчет и попадает ко второй записи, он пропускает имя сотрудника.Зачем?Пожалуйста помоги.Вот код:

package payroll_program_3;
import java.util.Scanner;

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

            Scanner input = new Scanner( System.in );

            employee_info theEmployee = new employee_info();

            String eName = "";
            double Hours = 0.0;
            double Rate = 0.0;
while(true)
        {
System.out.print("\nEnter Employee's Name: ");
eName = input.nextLine();
theEmployee.setName(eName);
if (eName.equalsIgnoreCase("stop"))
                {     return;
                }

System.out.print("\nEnter Employee's Hours Worked: ");
Hours = input.nextDouble();
theEmployee.setHours(Hours);
while (Hours <0)                                                                 {                                                                                                                  System.out.printf("Hours cannot be negative\n");
                    System.out.printf("Please enter hours worked\n");
                    Hours = input.nextDouble();
                    theEmployee.setHours(Hours);
                }

System.out.print("\nEnter Employee's Rate of Pay: ");
Rate = input.nextDouble();
theEmployee.setRate(Rate);
while (Rate <0)                                                                 {                                                                                                                  System.out.printf("Pay rate cannot be negative\n");
                    System.out.printf("Please enter hourly rate\n");
                    Rate = input.nextDouble();
                    theEmployee.setRate(Rate);
                }

System.out.print("\n Employee Name:     " + theEmployee.getName());
System.out.print("\n Employee Hours Worked:     " + theEmployee.getHours());
System.out.print("\n Employee Rate of Pay:     " + theEmployee.getRate() + "\n\n");
System.out.printf("\n %s's Gross Pay: $%.2f\n\n\n", theEmployee.getName(), theEmployee.calculatePay());
        }
    }
}


PART 2:

package payroll_program_3;

        public class employee_info
{
            String employeeName;
            double employeeRate;
            double employeeHours;

public employee_info()
    {
    employeeName = "";
    employeeRate = 0;
    employeeHours = 0;
    }

public void setName(String name)
    {
    employeeName = name;
    }

public void setRate(double rate)
    {
    employeeRate = rate;
    }

public void setHours(double hours)
    {
    employeeHours = hours;
    }

public String getName()
    {
    return employeeName;
    }

public double getRate()
    {
    return employeeRate;
    }

public double getHours()
    {
    return employeeHours;
    }

public double calculatePay()
    {
    return (employeeRate * employeeHours);
    }
}

Ответы [ 2 ]

5 голосов
/ 22 февраля 2011

Есть два места, где может возникнуть бесконечный цикл, так как Hours & Rate не изменяется внутри них.

while (Hours <0)
{
  System.out.printf("Hours cannot be negative\n");
  System.out.printf("Please enter hours worked\n");
}

while (Rate <0)
{
  System.out.printf("Pay rate cannot be negative\n");
  System.out.printf("Please enter hourly rate\n");
}

Не прочитал весь код, но, вероятно,это должен быть оператор if, содержащий continue.

0 голосов
/ 22 февраля 2011

Вам нужно часы = input.next double, чтобы изменить переменную часа, чтобы она не выполнялась в то время как условие

...