0

アドレス帳を作成する課題があります。使い勝手の良さに基づいてプログラムを作成しました。たとえば、新しいエントリを作成する場合、有効なエントリが与えられるかキャンセルするまで、ユーザーは次の入力に進むことができません。プログラムを作成した後、家庭教師が提供した大学の例を読んでいました。エントリが追加される前に有効な入力をチェックする代わりに、.add 要求を送信し、不良データが検出された場合は例外を発生させます。

私は自分のデザインの方が優れていると思いますが、彼らのやり方をしなかったので点数を失いたくないので、このようにするべきかどうかを家庭教師に尋ねました。彼は、次の例に固執する必要があると言いました。

public AddressBook()
{
    entries = new ArrayList < Entry >();
}

public void addPerson(Entry addPerson)
{
    entries.add(addPerson);
}

private void addCommand()
   {      

    System.out.print("Enter Full Name : ");
    String name = myScanner.nextLine();
    System.out.print("Enter House No and Street name: ");
    String street = myScanner.nextLine();
    System.out.print("Enter Town: ");
    String town = myScanner.nextLine();
    System.out.print("Enter Postcode: ");
    String postcode = myScanner.nextLine();
    postcode = postcode.toUpperCase();

    addressBook.addPerson(new Entry(name, street, town, postcode));        
   }

public Entry(String strName, String strStreet, String strTown, String strPostcode)
    {
       name = strName;
       street = strStreet;
       town = strTown;
       postcode = strPostcode;
       try
       {
          checkDetails();
       }
       catch ( BadDataException e)
        {
            throw new RuntimeException( e.getMessage());             }
    }

私はこの方法で試してみて、次のように変更しました:

throw new RuntimeException(e.getMessage()); 

読む行

System.out.println( e.getMessage());

プログラムを終了しないように、この方法で既にエントリが追加されているため、適切なエラーを与えた後、追加されたエントリを削除する必要があります。これどうやってするの?それはある種のインデックスを持っていますか?なぜ家庭教師があなたにこのようにしてほしいのかわかりませんか、それとも私は要点を逃していますか?

4

3 に答える 3

3

ここで呼び出される Entry コンストラクターで例外がスローされた場合:

addressBook.addPerson(new Entry(name, street, town, postcode));

リストに追加されません。コードをそのままにして、ここで例外をキャッチします。

try{
   addressBook.addPerson(new Entry(name, street, town, postcode));
catch(Exception e){
   //Tell the user what he did wrong and let him reenter
}
于 2013-03-08T09:33:05.697 に答える
0

コンストラクターでチェック済み例外、つまりExceptionではなく拡張する例外を宣言できますRuntimeException。その後、メソッドでそれを処理する必要がありますaddCommand

public AddressBook() {
    entries = new ArrayList< Entry>();
}

public void addPerson(Entry addPerson) {
    entries.add(addPerson);
}

private void addCommand() {

    System.out.print("Enter Full Name : ");
    String name = myScanner.nextLine();
    System.out.print("Enter House No and Street name: ");
    String street = myScanner.nextLine();
    System.out.print("Enter Town: ");
    String town = myScanner.nextLine();
    System.out.print("Enter Postcode: ");
    String postcode = myScanner.nextLine();
    postcode = postcode.toUpperCase();
    final Entry entry;
    try {
        entry = new Entry(name, street, town, postcode);
    } catch  (BadDataException ex) {
        System.out.println(ex.getMessage());
        return;
    }        
    addressBook.addPerson(new Entry(name, street, town, postcode));
}


public Entry(String strName, String strStreet, String strTown, String strPostcode) throws BadDataException {
    name = strName;
    street = strStreet;
    town = strTown;
    postcode = strPostcode;
    try {
       checkDetails();
    } catch(Exception ex) {
       throw new BadDataException(ex);
    }
}

private static class BadDataException extends Exception {

    public BadDataException(final Throwable cause) {
         super(cause);
    }
}
于 2013-03-08T09:33:16.020 に答える
0

エントリの追加を に入れてみませんtry-catchか?

try{
    Entry entry = new Entry(name, street, town, postcode);
    addressBook.addPerson(entry);
}catch(Exception e){
    // Entry is not added into the List.
    // do something and make the user re-enter the details.
}
于 2013-03-08T09:33:24.330 に答える