Цикл while с вложенными операторами if / else - PullRequest
4 голосов
/ 22 февраля 2012

Привет У меня проблемы с правильной работой моей программы. Мне удалось очистить любые синтаксические ошибки, но теперь я выдал свой вывод.

Прежде всего, внутри первого оператора IF, он предлагает человеку ввести его имя и отдел одновременно, чтобы при выводе имя было пустым и вводился только отдел. Я думаю, что это что-то со всем оператором IF, потому что если я изменю «String name» на input.next, тогда name будет отображаться правильно, но команды dept и totalHrsWkd будут объединены вместе.

Кроме того, во время тестирования моей программы происходит сбой при вводе отрицательного числа для totalHrsWkd. Он отобразит два оператора печати в одной строке, а затем завершит работу JCreator.

Буду признателен за любую помощь по этому вопросу, спасибо!

    public static void main(String[] args)
    {
    // TODO code application logic here

    int attempt = 1, employeeID = 0;
    double hoursWorked = 0.0;
    double overtimeHrs = 0.0;
    double totalHrsWkd = 0.0;

    Scanner input = new Scanner(System.in);

    while( attempt < 4 )
    {
        System.out.println( "Enter your employee ID: " );
      employeeID = input.nextInt();

        if( employeeID == 12345678 )
        {
        System.out.printf( "Enter your name: " );
        String name = input.nextLine();

    System.out.printf( "Enter your department: " );
        String dept = input.nextLine();

    System.out.printf( "Enter your hours worked including overtime:  " );
        totalHrsWkd = input.nextDouble();

        while( totalHrsWkd < 0 )
            {
            System.out.printf( "Try again!  Hours worked cannot be negative.");

            System.out.printf( "Enter your hours worked including overtime: ");
            }

            overtimeHrs = totalHrsWkd - 40;
            hoursWorked = totalHrsWkd - overtimeHrs;

            if( overtimeHrs <= 0 )
            {
            }
            else if( overtimeHrs == 0 )
            {
            }
            else if( hoursWorked == totalHrsWkd )
            {
            }
            else if( hoursWorked == 40 )
            {
            }
        System.out.printf( "Name: %s\n" + "Dept: %s\n" + 
                    "Hours Worked:  %.2f\n" + "Overtime Hours: %.2f\n"
                     + "Total Hours Worked: %.2f\n", name, dept, 
                     hoursWorked, overtimeHrs, totalHrsWkd);

        attempt = 3;
        }
    else
    {
        if(attempt < 3)
        {
        System.out.println( "Invalid ID!  Try again."  );
        }
        else
        {
        System.out.println( "Invalid ID!  0 attempts left.  Exiting program!" );
        }

      }

    ++attempt;
   }
    System.exit(0);
}
}

Ответы [ 3 ]

3 голосов
/ 22 февраля 2012

Проблема в том, что

  employeeID = input.nextInt();

только читает следующую последовательность цифр из входного потока.Однако для фактического ввода идентификатора сотрудника вам также пришлось нажать Enter.Нажатие клавиши Enter все еще ожидает ввода, поэтому при следующем вызове

    String name = input.nextLine();

класс Scanner говорит: «О, вот нажатие клавиши Enter, я думаю, пользователь хотел пустое имя».Вам даже не дают возможности ввести имя, поэтому кажется, что ваша программа задает два вопроса (имя и отдел) одновременно.

Если вы хотите продолжать использовать Scanner class, я бы рекомендовал избегать таких методов, как nextInt() и всегда использовать вместо него nextLine().Затем вам, конечно, придется преобразовать число, набранное пользователем, в целое число Java, используя что-то вроде parseInt().

2 голосов
/ 22 февраля 2012
attempt = 3; // Seems suspicious

attempt++; // I think it's more appropriate in loops of this kind than ++attempt
1 голос
/ 22 февраля 2012

Причина, по которой ваша программа не работает, когда totalHrsWkd меньше 0, заключается в том, что следующий код создает бесконечный цикл.

  while ( totalHrsWkd < 0 )
            {
            System.out.printf( "Try again!  Hours worked cannot be negative.");

            System.out.printf( "Enter your hours worked including overtime: ");
            }

Вы также должны прочитать количество часов, отработанных в этом цикле.

...