0

大丈夫。「Payroll」というクラスを使用する「PayrollDemo」というクラスがあります。特定の例外を管理するいくつかの例外クラスを既にセットアップしましたが、これらの例外をスローする方法を理解する必要があります。

入力された各フィールドが適切な基準であるかどうかをチェックする一連の if ステートメントを使用して、これを行う必要があると思います。問題は、私が作業しているクラスとは異なるクラスで例外処理がダウンしているため、どのようにスローできるかわかりません。

ここでは、名前文字列が空でないことを確認しています。空である場合、「InvalidNameException」と呼ばれる例外が発生し、「PayrollDemo」と同じフォルダーにある「InvalidNameException」クラスにスローされます。クラス。

public class PayrollDemo
{
public static void main(String[] args)
{
  Payroll pr = new Payroll ("Test Name", 234);

  System.out.println("Current Employee Information. \n");
  System.out.println("Name: " + pr.getName());
  System.out.println("ID: " + pr.getID());
  System.out.println("Hourly Pay Rate: " + pr.getHourlyPayRate());
  System.out.println("Number Hours Worked: " + pr.getNumHoursWorked());
  System.out.println("Gross Pay: $" + pr.calculateGrossPay() + "\n");

  System.out.println("Welcome to the payroll screen. \n");
  Scanner keyboard = new Scanner(System.in);
  System.out.print("Please enter a name: ");
  String newName = keyboard.nextLine();
  System.out.print("Please enter an ID: ");
  int newID = keyboard.nextInt();
  pr.setID(newID);
  System.out.print("Please enter an hourly pay rate: ");
  double newPayRate = keyboard.nextDouble();
  pr.setHourlyPayRate(newPayRate);
  System.out.print("Please enter the number of hours worked: ");
  int newHours = keyboard.nextInt();
  pr.setNumHoursWorked(newHours);

  if (newName == "")
  {
     throw new InvalidNameException();
  }
  else
  {
     pr.setName(newName);
  }

ここに InvalidNameException があります

public class InvalidNameException extends Exception
{
/**
    No-arg constructor
*/

public InvalidNameException()
 {
    super("Invalid name");
 }
}
4

2 に答える 2

1

例外を正しくスローしています。ただし、 から投げますmain()。したがって、 の実行はmain()例外ですぐに終了します。これは、tryブロックで囲まない限り、プログラムがスタック トレースを出力して終了することを意味します。

tryブロックを持ち、投稿したコードを含む別のメソッド (おそらく別のクラス) を呼び出す1 つのメソッドを作成する必要があります。ブロックの最後で、tryInvalidNameException をキャッチして何かを行います (ユーザーをデータ入力に戻すなど)。

編集:例外クラスは例外を処理InvalidNameExceptionしません。それ例外です。このクラスに記述する唯一のコードは、例外条件を記述するために必要なものです。たとえば、名前の実際の値であるプロパティを与えることができます。

于 2014-09-29T14:28:01.023 に答える
1

あなたはとても近くにいます。警告: 次のコードはテストされていないため、やりたいことの要点にすぎません。

できることの 1 つは、ユーザー入力を処理するクラスを作成することです。このクラスは、入力を読み取って検証し、さまざまな種類の例外をスローします。

public class UserInput{
    private Scanner keyboard;

    public UserInput(Scanner keyboard){

       this.keyboard = keyboard;
    }

    public String getName() throws InvalidNameException{
        System.out.print("Please enter a name: ");
        String newName = keyboard.nextLine();
        if(/*some bad condition*/){
            throw new InvalidNameException();
        }else{
            return newName;
        }
    }
}

次に、メイン メソッドは次のようになります。

 UserInput inputReader = new UserInput(new Scanner(System.in));
 String name;
 try{
     name = inputReader.getName();
 }
 catch(InvalidNameException e){
     //do some thing with e
 }

ここでは、try catch ブロックで例外をスローするメソッドをラップし、さまざまな種類の例外をキャッチします。お役に立てれば

于 2014-09-29T14:37:01.813 に答える