2011-06-22 17 views
-1

整数変数 "paycategory"の入力範囲をチェックするプログラムを作成しましたが、入力ミスのエラーもチェックしたいときに使いました。私はそれを試みましたが、うまくいきません... 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(); 

条件を修正してください。

1

De Morgan's lawsを読んでください。

!(PayCategory >0 || PayCategory <5)は、!(PayCategory>0) && !(PayCategory<5)に相当します。

0

ドッグベーンは彼の答えではかなり正しいですが、この問題はあなたのコードでよく見られます。あなたはエラーを見つけにくくするというあなたの論理的条件を複雑にしています。

はラインに乗りません:

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

HoursWorkedはいつもカッコ条件が常にtrueになります> 1か< 80のいずれかになりますし、逆でした。あなたの論理的な条件を簡単にして、!を使用するのではなく、それらが何であるかを簡単に見ることができます。それが本当に必要でないときはオペレータです。

この条件は次のようになります。

else if (HoursWorked < 1 || HoursWorked > 80) 
関連する問題