Java while循环工作时出现问题,if语句读取负双精度
我试图为我的java类编写的一些简单代码有两个问题。对不起,如果你们大多数人觉得这很容易,我只是从Java开始。我遇到的第一个问题是循环无法正常继续。它只运行一次就可以了,如果在开始时输入“quit”,它将退出,但在运行一次之后,它不会让用户为emp name输入另一个值。它直接从最后一行输入emp名称到循环的第一行,输入小时费率,没有机会输入新名称或退出 我的第二个问题是我的if语句试图确保为小时工资和工作小时输入的值大于0。如果输入0,则会显示错误消息,但如果输入负数,则程序会继续运行,就像没有任何错误一样。如何确保输入的值仅为正双精度,并且不接受负双精度或零Java while循环工作时出现问题,if语句读取负双精度,java,loops,double,Java,Loops,Double,我试图为我的java类编写的一些简单代码有两个问题。对不起,如果你们大多数人觉得这很容易,我只是从Java开始。我遇到的第一个问题是循环无法正常继续。它只运行一次就可以了,如果在开始时输入“quit”,它将退出,但在运行一次之后,它不会让用户为emp name输入另一个值。它直接从最后一行输入emp名称到循环的第一行,输入小时费率,没有机会输入新名称或退出 我的第二个问题是我的if语句试图确保为小时工资和工作小时输入的值大于0。如果输入0,则会显示错误消息,但如果输入负数,则程序会继续运行,就像
// Program to Calculate Payroll
import java.util.Scanner;
import java.text.DecimalFormat;
class Payroll
{
public static void main(String args[])
{
Scanner myScanner = new Scanner(System.in);
String empName;
double hourlyRate;
double hoursWorked;
double grossPay;
double netPay;
double taxes;
DecimalFormat money = new DecimalFormat("$.00");
//Get User Information
System.out.print( "Enter employee name or enter 'quit' when finished. " );
empName = myScanner.nextLine();
while (!empName.equals("quit"))
{
System.out.print( "What is their hourly rate? $");
hourlyRate = myScanner.nextDouble();
if (hourlyRate <= 0)
{
System.out.println( "Value is not valid, please enter an amount above zero.");
System.out.print( "What is their hourly rate? $");
hourlyRate = myScanner.nextDouble();
}
System.out.print( "How many hours did they work? ");
hoursWorked = myScanner.nextDouble();
if (hoursWorked <= 0)
{
System.out.println( "Value is not valid, please enter an amount above zero.");
System.out.print( "How many hours did they work? ");
hoursWorked = myScanner.nextDouble();
}
//Calculate Pay and Taxes
grossPay = hourlyRate * hoursWorked;
taxes = .13 * grossPay;
netPay = grossPay - taxes;
//Display All Information
System.out.print( "Employee name: ");
System.out.println(empName);
System.out.print( "Hourly Rate: ");
System.out.println(money.format(hourlyRate));
System.out.print( "Hours Worked: ");
System.out.println(hoursWorked);
System.out.print( "Gross Pay = ");
System.out.println(money.format(grossPay));
System.out.print( "Federal Taxes = ");
System.out.println(money.format(taxes));
System.out.print( "Net Pay = ");
System.out.println(money.format(netPay));
System.out.print( "Enter employee name or enter 'quit' when finished. " );
empName = myScanner.nextLine();
}
System.out.println( "Thank you for using this payroll program.");
}
}
//计算工资单的程序
导入java.util.Scanner;
导入java.text.DecimalFormat;
班级工资单
{
公共静态void main(字符串参数[])
{
Scanner myScanner=新扫描仪(System.in);
字符串名称;
双钟头;
工作两小时;
重瓣罗缎;
双网支付;
双重征税;
十进制货币=新的十进制货币($0.00);
//获取用户信息
系统输出打印(“输入员工姓名或完成后输入“退出”);
empName=myScanner.nextLine();
而(!empName.equals(“退出”))
{
System.out.print(“他们的小时费率是多少?$”);
hourlyRate=myScanner.nextDouble();
如果(hourlyRate作为对第一个问题的响应,您不是在while
循环中询问员工姓名。您应该在循环外初始化empName
,但也应该在每次循环时再次询问
String empName = "";
while (!empName.equals("quit")) {
//Get User Information
System.out.print( "Enter employee name or enter 'quit' when finished. " );
empName = myScanner.nextLine();
if (empName.equals("quit")) {
break;
}
对于第二个问题,您可以再次使用while
循环并检查以确保hourlyRate
大于0
。只要确保每次循环检查时都重新提示即可
hourlyRate = -1;
while (hourlyRate <= 0) {
System.out.print( "What is their hourly rate? $");
hourlyRate = myScanner.nextDouble();
if (hourlyRate <= 0) {
System.out.println( "Value is not valid, please enter an amount above zero.");
}
}
hourlyRate=-1;
while(hourlyRate)
它不允许用户为emp名称输入其他值
您只要求输入一次员工姓名,因为它不在循环中。移动代码以在循环中输入姓名。将代码添加到循环的末尾可能会被罚款,但我更喜欢在开始时进行一次检查,中途中断
如何确保输入的值仅为正双精度,并且不接受负双精度或零
// Program to Calculate Payroll
import java.util.Scanner;
import java.text.DecimalFormat;
class Payroll
{
public static void main(String args[])
{
Scanner myScanner = new Scanner(System.in);
String empName;
double hourlyRate;
double hoursWorked;
double grossPay;
double netPay;
double taxes;
DecimalFormat money = new DecimalFormat("$.00");
//Get User Information
System.out.print( "Enter employee name or enter 'quit' when finished. " );
empName = myScanner.nextLine();
while (!empName.equals("quit"))
{
System.out.print( "What is their hourly rate? $");
hourlyRate = myScanner.nextDouble();
if (hourlyRate <= 0)
{
System.out.println( "Value is not valid, please enter an amount above zero.");
System.out.print( "What is their hourly rate? $");
hourlyRate = myScanner.nextDouble();
}
System.out.print( "How many hours did they work? ");
hoursWorked = myScanner.nextDouble();
if (hoursWorked <= 0)
{
System.out.println( "Value is not valid, please enter an amount above zero.");
System.out.print( "How many hours did they work? ");
hoursWorked = myScanner.nextDouble();
}
//Calculate Pay and Taxes
grossPay = hourlyRate * hoursWorked;
taxes = .13 * grossPay;
netPay = grossPay - taxes;
//Display All Information
System.out.print( "Employee name: ");
System.out.println(empName);
System.out.print( "Hourly Rate: ");
System.out.println(money.format(hourlyRate));
System.out.print( "Hours Worked: ");
System.out.println(hoursWorked);
System.out.print( "Gross Pay = ");
System.out.println(money.format(grossPay));
System.out.print( "Federal Taxes = ");
System.out.println(money.format(taxes));
System.out.print( "Net Pay = ");
System.out.println(money.format(netPay));
System.out.print( "Enter employee name or enter 'quit' when finished. " );
empName = myScanner.nextLine();
}
System.out.println( "Thank you for using this payroll program.");
}
}
您只要求用户更正数字一次。如果您使用while循环,它将一直询问,直到正确的速率
它不允许用户为emp名称输入其他值
因为你的线路有问题
hoursWorked = myScanner.nextDouble();
empName = myScanner.nextLine();
因为这只接受双精度值,而不接受\n
值。所以,在最后,当程序移动到行时
hoursWorked = myScanner.nextDouble();
empName = myScanner.nextLine();
它将继续使用\n
作为empName,并跳过键盘上的输入
在请求输入empName值之前,需要放置另一个myScanner.nextLine()
myScanner.nextLine();
System.out.println("....");
empName = myScanner.nextLine();
对于验证,只需像另一个建议的那样执行循环的末尾确实会再次请求empName,但当我按原样运行时,它会跳过获取该输入,直接返回到循环的顶部。如果我删除循环末尾再次请求信息的最后一行,并将其更改为您建议的方式,则循环将运行一次然后不要重复第一个问题,再问一次名字。