Search code examples
javaif-statementwhile-loopnested-loops

While loop with nested if/else statements


Hi I am having trouble with getting my program to run properly. I was able to clear any syntax errors, but now I am having issued with my output.

First of all, inside the first IF statement, it prompts for the person to enter their name and department at the same time, so that when it outputs, name is blank and only department has input. I'm thinking it's something with the whole IF statement, because if I change "String name" to input.next then name prompts correctly, but dept and totalHrsWkd get merged together.

Also, while testing my program, it crashes when I enter a negative number for totalHrsWkd. It will display the two print statements all on one line and then crash JCreator.

I'd appreciate any help on the matter, thank you!

    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);
}
}

Solution

  • The problem is that

      employeeID = input.nextInt();
    

    only reads the next sequence of digits from the input stream. However, in order to actually type the employee ID, you had to press Enter too. The Enter keypress is still waiting on the input, so when you next call

        String name = input.nextLine();
    

    the Scanner class goes "oh, here's an Enter keypress, I guess the user wanted an empty name." You're not even given a chance to enter a name, which is why it seems like your program asks two questions (the name and department) at the same time.

    If you wish to continue to use the Scanner class, I would recommend avoiding the methods such as nextInt() and always using nextLine() instead. You will, of course, then have to convert the number typed by the user into a Java integer using something like parseInt().