2011-06-22 60 views
-1

我创建了一个程序来检查整型变量“paycategory”的输入范围,但是当我想检查inputmismatch错误时也是如此。我试过但它不工作......我不想将数据类型更改为字符串,因为paycategory应该是整数。请帮助如何解决这个问题?InputMismatch异常不起作用

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")); 

    } 

} 

感谢

+0

什么叫“它不工作”是什么意思?它在做什么?它应该做什么? – Mat

+0

它没有做任何事情....这就是为什么我没有把任何细节... – user804437

回答

1

低于你的情况可能不会为真,所以InputMismatchException将永远不会被抛出。

if(!(PayCategory >0 || PayCategory <5)) 
    throw new InputMismatchException(); 

纠正您的情况。

0

Dogbane在他的回答中是相当正确的,但是这个问题在你的代码中很常见:你已经过分复杂化了你的逻辑条件,这使得错误难以发现。

采取行:

else if (!(HoursWorked > 1 || HoursWorked < 80)) 

HoursWorked永远是要么> 1或< 80,方括号内的条件总是为真,从不相反。尽量让你的逻辑条件更简单,这样你就可以很容易地看到他们是什么,而不是使用!运营商,当它真的没有必要。

这种情况应该是:

else if (HoursWorked < 1 || HoursWorked > 80)