Java 输入不匹配异常不工作
我已经创建了一个程序来检查整数变量“paycategory”的输入范围,但当我还想检查输入不匹配错误时。我试过了,但不起作用。。。我不想将数据类型更改为string,因为paycategory应该是整数。请帮助解决此问题Java 输入不匹配异常不工作,java,Java,我已经创建了一个程序来检查整数变量“paycategory”的输入范围,但当我还想检查输入不匹配错误时。我试过了,但不起作用。。。我不想将数据类型更改为string,因为paycategory应该是整数。请帮助解决此问题 import java.util.Scanner; import java.util.*; import java.text.*; import java.lang.Object.*; public class TestEmployeePayRoll { publ
import java.util.Scanner;
import java.util.*;
import java.text.*;
import java.lang.Object.*;
public class TestEmployeePayRoll {
public static void main(String Args[])
{
String EmployeeID = null, FirstName = null, LastName = null, result;
double HoursWorked;
int PayCategory = 0, counter = 0;
do
{
Scanner input = new Scanner(System.in);
try
{
int flag = 1;
String input1 ;
System.out.println("Enter your Employee ID number: ");
while(flag==1){
EmployeeID = input.nextLine();
if(EmployeeID.trim().length()>=5){
flag = 0;
System.out.println("Enter the First Name: ");
FirstName = input.nextLine();
System.out.println("Enter Last Name: "+ " ");
LastName = input.nextLine();
}else
System.out.print("EmployeeID must be exactly 5 digits long: \n Enter the Employee ID again: ");
}
}
catch(Exception e)
{
System.out.println("Exception ");
}
try{
do{
System.out.println("Enter the Pay Category: "+ " ");
PayCategory = input.nextInt();
if(!(PayCategory >0 || PayCategory <5))throw new InputMismatchException();
{
System.out.println("Pay Category must be between 1 and 4");
}
}
while(PayCategory < 1 || PayCategory > 4);
}
catch(InputMismatchException e)
{
System.out.println("PayCategory must be integers");
}
do
{
System.out.println("Enter the number of hours worked: ");
HoursWorked = input.nextDouble();
Double hours = new Double(HoursWorked);
if(hours.isNaN())
{
System.out.println("---Enter a valid hours value---");
}
else if(!(HoursWorked >1 || HoursWorked <80))
{
System.out.println("---Enter value between 1 and 80---");
}
}
while(HoursWorked < 1 || HoursWorked > 80);
EmployeePayRoll obj1 = new EmployeePayRoll(FirstName, LastName, EmployeeID, HoursWorked, PayCategory);
DecimalFormat fmt = new DecimalFormat("###,##0.00");
System.out.println("\n-----------------------------------------------------");
System.out.println("\n The pay details for:" + obj1.getName() + "\t\t\t" + "ID:" + EmployeeID);
System.out.println("\n-----------------------------------------------------");
System.out.println("Pay Category: \t\t\t" + obj1.getPayCategory());
System.out.println("Hours Worked: \t\t\t" + obj1.getHoursWorked());
System.out.println("Pay Rate: \t\t\t" + obj1.getPayRate());
System.out.println("Gross Pay: \t\t\t" + "$"+fmt.format(obj1.getGrossPay()));
System.out.println("Tax Payable: \t\t\t" + "$"+fmt.format(obj1.getTaxPayable()));
System.out.println("\t\t\t\t---------");
System.out.println("Net Pay: \t\t\t" + "$" + fmt.format(obj1.getNetPay()));
System.out.println("\n------------------------------------------------------");
System.out.println();
System.out.println("\n Process another employee? (Y/N)");
result = input.next();
}
while (result.equals("Y")||result.equals("y"));
}
}
import java.util.Scanner;
导入java.util.*;
导入java.text.*;
导入java.lang.Object.*;
公共类TestEmployeePayRoll{
公共静态void main(字符串参数[])
{
字符串EmployeeID=null,FirstName=null,LastName=null,result;
工作两小时;
int PayCategory=0,计数器=0;
做
{
扫描仪输入=新扫描仪(System.in);
尝试
{
int标志=1;
字符串输入1;
System.out.println(“输入您的员工ID号:”);
while(标志==1){
EmployeeID=input.nextLine();
如果(EmployeeID.trim().length()>=5){
flag=0;
System.out.println(“输入名字:”);
FirstName=input.nextLine();
System.out.println(“输入姓氏:+”);
LastName=input.nextLine();
}否则
System.out.print(“EmployeeID必须正好是5位数字:\n再次输入员工ID:”;
}
}
捕获(例外e)
{
System.out.println(“例外”);
}
试一试{
做{
System.out.println(“输入薪资类别:+”);
PayCategory=input.nextInt();
如果(!(薪资类别>0 | |薪资类别4);
}
捕获(输入不匹配异常e)
{
System.out.println(“PayCategory必须是整数”);
}
做
{
System.out.println(“输入工作小时数:”);
HoursWorked=input.nextDouble();
双倍工时=新的双倍工时(工作小时);
if(hours.isNaN())
{
System.out.println(“---输入一个有效的小时数值---”);
}
否则,如果(!(工时>1 | |工时80);
EmployeePayRoll obj1=新的EmployeePayRoll(名字、姓氏、EmployeeID、工作小时数、薪资类别);
DecimalFormat fmt=新的DecimalFormat(“0.00”);
System.out.println(“\n-----------------------------------------------”;
System.out.println(“\n支付详细信息:”+obj1.getName()+“\t\t”+“ID:”+EmployeeID”);
System.out.println(“\n-----------------------------------------------”;
System.out.println(“付款类别:\t\t\t”+obj1.getPayCategory());
System.out.println(“工作小时数:\t\t\t”+obj1.getHoursWorked());
System.out.println(“付款率:\t\t\t”+obj1.getPayRate());
System.out.println(“工资总额:\t\t\t”+“$”+fmt.format(obj1.getGrossPay());
System.out.println(“应付税款:\t\t\t”+“$”+fmt.format(obj1.getTaxPayable());
System.out.println(“\t\t\t\t-----------”);
System.out.println(“净支付:\t\t\t”+“$”+fmt.format(obj1.getNetPay());
System.out.println(“\n--------------------------------------------------------------”;
System.out.println();
System.out.println(“\n处理其他员工?(Y/n)”);
结果=输入。下一步();
}
而(result.equals(“Y”)| result.equals(“Y”);
}
}
谢谢您下面的条件永远不会为真,因此将永远不会抛出
InputMismatchException
if(!(PayCategory >0 || PayCategory <5))
throw new InputMismatchException();
if(!(PayCategory>0 | | PayCategory请继续阅读
!(PayCategory>0 | | PayCategory 0)和&!(PayCategoryDogbane的回答非常正确,但这个问题在代码中很常见:您的逻辑条件过于复杂,这使得错误更难发现
走这条线:
else if (!(HoursWorked > 1 || HoursWorked < 80))
else如果(!(工作小时数>1 | |工作小时数<80))
HoursWorked将始终大于1或小于80,因此括号内的条件将始终为真,反之亦然。请尝试简化逻辑条件,以便您可以轻松查看它们是什么,而不是在确实不需要时使用!运算符
该条件应为:
else if (HoursWorked < 1 || HoursWorked > 80)
else if(工时<1 | |工时>80)
你说的“它不工作”是什么意思?它在做什么?它应该做什么?它什么都没做,兄弟……这就是为什么我没有说任何细节。。。