java - 删除一台扫描仪,薪资程序第 3 周

标签 java

<分区>

我怎样才能摆脱一台扫描仪?如果我只使用一台扫描仪,那么在输出 weekly_pay 之后是:

Employee Name
Enter the hours worked for the week.

程序直接跳过询问员工姓名变量。对于这两种扫描仪,它确实确实会按应有的方式循环询问员工姓名。

//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 + "'s weekly pay is $" + weekly_pay ); // output the employees name and weekly pay
            }
        }
        Scanner.close();
        Scanner1.close();
    } //ends main method
} //ends class WeeklyPay

最佳答案

嗯,我要说的第一件事就是小心命名您的扫描仪。不要以大写开头。现在一件大事是您不想使用 != 比较字符串,这不适用于字符串变量。有一种有趣的方法可以比较 .equals().equalsIgnoreCase() 的字符串,具体取决于您是否希望它不区分大小写。现在,在更改代码中的几件事后,它就可以正常工作了。另外请注意,Java 还包括一种格式化货币的方法。你的工资数字少了一位小数。如果您查看我在扫描仪之后添加的 NumberFormat,然后查看末尾的 println,您会发现它非常易于使用。

  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 + "'s weekly pay is: " + format.format(weekly_pay)); // output the employees name and weekly pay
            scanner.nextLine();
        }
    }
    scanner.close();

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

这是我们将看到的输出:

enter image description here

哦,PS:通过在同一行提示输入,使程序更简洁,更直观,更好看。一定要在输入之后而不是之前添加一个换行符:)

关于java - 删除一台扫描仪,薪资程序第 3 周,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30534769/

相关文章:

Java:同步标准输出和标准错误

java - 反向字符串方法类型不匹配错误java

java - 使用 DecimalFormat 时如何防止小数被舍入?

java - 这个图案是什么意思?

java - 我已经为 SortedMap 创建了一个 put() 方法,但似乎无法让测试代码正常工作

java - Android 内存不足错误

java - 需要使用brew : Java 1. 7在Mac上安装Zeppelin

java - 当使用 String 作为正则表达式时, String[].split(String regex) 根本不会拆分

java - fest 和带有自定义 map 的断言-j 之间的细微差别

java - 如何在 hibernate 实体中使用大写属性