Почему моя программа пропускает запрос в цикле?
Мой код должен непрерывно повторяться до тех пор, пока в качестве имени сотрудника не будет введен "стоп". Проблема, с которой я столкнулся, заключается в том, что, как только он вычислит часы и ставку первого сотрудника, он снова пропустит запрос на ввод имени сотрудника. Зачем? (Код в 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) //By using this statement, the program will not
{ //allow negative numbers.
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) //By using this statement, the program will not
{ //allow negative numbers.
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());
}
}
}
А ТАКЖЕ
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);
}
}
3 ответа
Проблема в:
eName = input.nextLine();
Измените это на:
eName = input.next();
Это будет работать.
По умолчанию java.util.Scanner
Класс начинает синтаксический анализ текста, как только вы нажмете клавишу ввода. Так что внутри цикла вы должны просить input.next();
как строка уже обрабатывается.
Смотрите Javadoc для обоих методов.
Я предполагаю, что он ожидает ввода в input.nextLine()
но подсказка не появляется.
Я предполагаю, что где-то есть проблема с буферизацией - приглашение распечатывается, но вывод не попадает на экран. Попробуйте позвонить System.out.flush()
перед звонком input.nextLine()
,
Никогда не использовал Java в моей жизни, но здесь это идет...
Rate = input.nextDouble();
В ответ на эту строку вы можете ввести "15.00", а затем нажать {enter}, что поместит "новую строку" во входной поток, сделав входной поток 15.00\n
, При извлечении Double, он оставит "новую строку" все еще во входном потоке.
Когда вы пытаетесь запросить у пользователя имя другого сотрудника, он читает, что во входном потоке все еще есть "новая строка", и он немедленно вернет то, что было до этого, то есть пустую строку.
Чтобы очистить входной поток, запустите фиктивную.nextLine.