1

try / catchブロックコードを圧縮する方法はありますか?現在、私のコードには、try/catchコード内にtry/catchコードがあります。

if(petType.equals("DOG")) {

  try {
    String name = input.next();
    String owner = input.next();
    double weight = input.nextDouble();
    SimpleDateFormat stdDate = new SimpleDateFormat("MM/dd/yy");

    try {
      Date vaccineDate = stdDate.parse(input.next());
      boolean fixed = input.nextBoolean();
      Dog x = new Dog(name,owner,weight,vaccineDate,fixed);
      object.addPet(x);
    } 
    catch (ParseException ex) {
      System.out.println("ERROR - Vaccine date " + input.next() + " is not in mm/dd/yy format!");
      input.nextLine();
    }

  }
  catch(NoSuchElementException ex) {
    System.out.println("ERROR - Missing fields. Skipping line " + lineNumber + "...");
    input.nextLine();
  }

}
4

5 に答える 5

5

あなたはこれを行うことができます

if(petType.equals("DOG")) {

  try {
    String name = input.next();
    String owner = input.next();
    double weight = input.nextDouble();
    SimpleDateFormat stdDate = new SimpleDateFormat("MM/dd/yy");
    Date vaccineDate = stdDate.parse(input.next());
    boolean fixed = input.nextBoolean();
    Dog x = new Dog(name,owner,weight,vaccineDate,fixed);
    object.addPet(x);
  }
  catch(NoSuchElementException ex) {
    System.out.println("ERROR - Missing fields. Skipping line " + lineNumber + "...");
    input.nextLine();
  }
  catch (ParseException ex) {
    System.out.println("ERROR - Vaccine date " + input.next() + " is not in mm/dd/yy format!");
    input.nextLine();
  }
}

またはJava7を使用

try {
...
} catch(ParseException | NoSuchElementException ex) {
...
}   

それがあなたが圧縮によって意味したものであるならば。

于 2012-11-09T01:38:48.290 に答える
3

まず、単一のtryブロックの後に、一連のcatchブロックを続けることができます。

try {
    throw IOException("msg");
    ...
    throw InterruptedException("msg");
}
catch (IOException ioe){
    ...
 } catch (InterruptedException ie) {
    ...
 }

例外に関するコードのより小さなコンテンツを処理するためにtry/catchブロックを絞り込みたい場合があるため、これはベストプラクティスではありません。

于 2012-11-09T01:42:16.253 に答える
1

使用できるtryブロックは1つだけで、catch(Exception ex)を使用してこれらすべての例外をキャッチします。特定の種類の例外に対応したい場合は、それをテストする必要があります。

于 2012-11-09T01:40:31.963 に答える
1

あなたはそれを行うことができます(以下を参照)。ただし、コードの構造について考えたい場合があります。たとえば、各catchブロックでinput.nextLineを呼び出す必要がないように再構成できます。

if(petType.equals("DOG")) {

  try {
    String name = input.next();
    String owner = input.next();
    double weight = input.nextDouble();
    SimpleDateFormat stdDate = new SimpleDateFormat("MM/dd/yy");

    Date vaccineDate = stdDate.parse(input.next());
    boolean fixed = input.nextBoolean();
    Dog x = new Dog(name,owner,weight,vaccineDate,fixed);
    object.addPet(x);    
  }
  catch (ParseException ex) {
    System.out.println("ERROR - Vaccine date " + input.next() + " is not in mm/dd/yy format!");
    input.nextLine();
  }
  catch(NoSuchElementException ex) {
    System.out.println("ERROR - Missing fields. Skipping line " + lineNumber + "...");
    input.nextLine();
  }    
}
于 2012-11-09T01:41:21.073 に答える
1

個人的には、try/catchブロックをネストするのは好きではありません。私はそれをこのように書きません。私はそれをもっとこのようにしたいと思います:

if(petType.equals("DOG")) {

  String vaccineDateString;
  try {
      String name = input.next();
      String owner = input.next();
      double weight = input.nextDouble();
      DateFormat stdDate = new SimpleDateFormat("MM/dd/yy");
      stdDate.setLenient(false);
      vaccineDateString = input.next();
      Date vaccineDate = stdDate.parse(vaccineDateString);
      boolean fixed = input.nextBoolean();
      Dog x = new Dog(name,owner,weight,vaccineDate,fixed);
      object.addPet(x);
    } catch (ParseException ex) {
        System.out.println("ERROR - Vaccine date " + vaccineDateString + " is not in MM/dd/yy format!");
        input.nextLine();
    } catch(NoSuchElementException ex) {
        System.out.println("ERROR - Missing fields. Skipping line " + lineNumber + "...");
        input.nextLine();
    }
}

私はまた、他のすべてのものとのあなたの混ざり合った入力に質問を見るでしょう。私は別の方法を見つけるでしょう。

于 2012-11-09T01:44:09.473 に答える