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
source to share
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:
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 :)
source to share
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
source to share