Deleting one scanner, payroll program Week 3

How can I get rid of one scanner? If I only use one crawler after weekly_pay exits, this:

Employee Name
Enter the hours of operation during the week.

The program jumps right over the request for the employee name variable. With both scanners, it really tries to prompt for the employee's name properly.

//Week 3 Assignment 
package weeklypay2;

import java.util.Scanner; // importing the Java utility class scanner 

public class WeeklyPay2 // class WeeklyPay
{
    //main method
    public static void main(String[] args)
    {
        Scanner Scanner = new Scanner(System.in);
        Scanner Scanner1 = new Scanner(System.in);

        String employee_name = null; // variable for employee name
        double hours_worked = 0, // variable for weekly hours worked
        pay_rate = 0, // variable for pay rate per hour
        weekly_pay = 0; // weekly pay = hours * pay_rate

        while (employee_name!="stop")
        {
            System.out.println("");
            System.out.println("Employee Name"); // prompt, employees name
            employee_name = Scanner1.nextLine();

            if (employee_name.equalsIgnoreCase("stop"))  
            {  
                System.out.print("Exiting Program");  
                break;  
            } // ends if statement  
            else
            {  
                System.out.println("Enter the hours worked for the week");
                //prompt, hours worked for the current week
                pay_rate = Scanner.nextDouble();

                while(pay_rate < 0.01)
                {
                    System.out.print("ERROR!!, Input a postive number: \n");
                    pay_rate = Scanner.nextDouble();
                }

                System.out.println("Enter the employees hourly pay rate"); 
                // prompt, the employees pay rate
                hours_worked = Scanner.nextDouble(); 

                while(hours_worked < 0.01)
                {
                    System.out.print("ERROR!!, Input a postive number: \n");
                    hours_worked = Scanner.nextDouble();
                }

                weekly_pay = (double) hours_worked * (double) pay_rate; // setting the variable weekly_pay
                System.out.println(employee_name + " weekly pay is $" + weekly_pay ); // output the employees name and weekly pay
            }
        }
        Scanner.close();
        Scanner1.close();
    } //ends main method
} //ends class WeeklyPay

      

+3


source to share


2 answers


Ok, the first thing I would say is to be careful about naming your scanner. Don't start with capital. Now, the big thing is you don't want to compare strings using! =, This is not meant for string variables. There is an interesting method for comparing strings, which will be .equals () or .equalsIgnoreCase () depending on whether you want case insensitive. Now, after changing these few things in your code, it works great. In addition, only the Java head also includes a currency formatting method. There is no decimal digit in board numbers. If you look at the NumberFormat I added after the scanner, and then look at the println at the end, you will see it very easy to use.

  import java.text.NumberFormat;
  import java.util.Scanner; // importing the Java utility class scanner 

  public class WeeklyPay2 // class WeeklyPay
  {
 //main method
 public static void main(String[] args)
{
    Scanner scanner = new Scanner(System.in);
    NumberFormat format = NumberFormat.getCurrencyInstance();
    String employee_name = "";
    double hours_worked = 0, // variable for weekly hours worked
    pay_rate = 0, // variable for pay rate per hour
    weekly_pay = 0; // weekly pay = hours * pay_rate

    while (!employee_name.equalsIgnoreCase("stop"))
    {

        System.out.println();
        System.out.print("Employee Name: "); 

        employee_name = scanner.nextLine();

        if (employee_name.equalsIgnoreCase("stop"))  
        {  
            System.out.print("Exiting Program");  
            break;
        } // ends if statement  
        else
        {  
            System.out.print("Enter the hours worked for the week: ");
            //prompt, hours worked for the current week
            pay_rate = scanner.nextDouble();

            while(pay_rate < 0.01)
            {
                System.out.print("ERROR!!, Input a postive number:  ");
                pay_rate = scanner.nextDouble();
            }

            System.out.print("Enter the employees hourly pay rate: "); 
            // prompt, the employees pay rate
            hours_worked = scanner.nextDouble(); 

            while(hours_worked < 0.01)
            {
                System.out.print("ERROR!!, Input a postive number: \n");
                hours_worked = scanner.nextDouble();
            }

            weekly_pay = (double) hours_worked * (double) pay_rate; // setting the variable weekly_pay
            System.out.println(employee_name + " weekly pay is: " + format.format(weekly_pay)); // output the employees name and weekly pay
            scanner.nextLine();
        }
    }
    scanner.close();

} //ends main method
} //ends class WeeklyPay

      

And this is the result we will see:



enter image description here

Oh PS: Keep the program cleaner by asking for input on the same line, more intuitive and better looking. Make sure to add a line break after your input, but not before :)

+1


source


use Scanner1.nextLine () after getting the value for hours worked.

See modified code below:



import java.util.Scanner; // importing the Java utility class scanner

public class WeeklyPay2 // class WeeklyPay
{
    //main method
    public static void main(String[] args) {

        Scanner Scanner1 = new Scanner(System.in);

        String employee_name = null; // variable for employee name
        double hours_worked = 0, // variable for weekly hours worked
                pay_rate = 0, // variable for pay rate per hour
                weekly_pay = 0; // weekly pay = hours * pay_rate

        //Scanner1.useDelimiter("//n");
        while (true) {

            System.out.println("");
            System.out.println("Employee Name"); // prompt, employees name

            employee_name = Scanner1.nextLine();

            if (employee_name.equalsIgnoreCase("stop"))

            {

                System.out.print("Exiting Program");

                break;

            }// ends if statement

            else {

                System.out.println("Enter the hours worked for the week");
//prompt, hours worked for the current week
                pay_rate = Scanner1.nextDouble();

                while (pay_rate < 0.01) {
                    System.out.print("ERROR!!, Input a postive number: \n");
                    pay_rate = Scanner1.nextDouble();
                }

                System.out.println("Enter the employees hourly pay rate");
                // prompt, the employees pay rate
                hours_worked = Scanner1.nextDouble();

                while (hours_worked < 0.01) {
                    System.out.print("ERROR!!, Input a postive number: \n");
                    hours_worked = Scanner1.nextDouble();
                    //Scanner1.
                }

                Scanner1.nextLine();
                weekly_pay = (double) hours_worked * (double)
                        pay_rate; // setting the variable weekly_pay

                System.out.println(employee_name + " weekly pay is $" + weekly_pay); // output the employees name and weekly pay

            }
        }

        Scanner1.close();

    } //ends main method


}//ends class WeeklyPay

      

+1


source







All Articles