Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 输入不匹配异常不工作_Java - Fatal编程技术网

Java 输入不匹配异常不工作

Java 输入不匹配异常不工作,java,Java,我已经创建了一个程序来检查整数变量“paycategory”的输入范围,但当我还想检查输入不匹配错误时。我试过了,但不起作用。。。我不想将数据类型更改为string,因为paycategory应该是整数。请帮助解决此问题 import java.util.Scanner; import java.util.*; import java.text.*; import java.lang.Object.*; public class TestEmployeePayRoll { publ

我已经创建了一个程序来检查整数变量“paycategory”的输入范围,但当我还想检查输入不匹配错误时。我试过了,但不起作用。。。我不想将数据类型更改为string,因为paycategory应该是整数。请帮助解决此问题

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)

你说的“它不工作”是什么意思?它在做什么?它应该做什么?它什么都没做,兄弟……这就是为什么我没有说任何细节。。。