0

ファイルの読み取り中にフィールドが欠落している場合、 NoSuchElementException をキャッチすると思います。フィールドが欠落している場合は、ファイルの次の行にスキップするだけです。私の質問は、これを行うために try/catch コードをどこに実装すればよいですか? コードは次のとおりです。

String petType;
int lineNumber = 0;

while(input.hasNext()) {

  petType = input.next();
  lineNumber++;

  //I'm thinking of doing it for every if(input.hasNext()) but that would be too messy to read.
  if(petType.equals("BIRD")) {
    if(input.hasNext())
      String name = input.next();
    if(input.hasNext())
      String owner = input.next();
    if(input.hasNextDouble())
      double weight = input.nextDouble();
    if(input.hasNextBoolean())
      boolean clipped = input.nextBoolean();
    Bird x = new Bird(name,owner,weight,clipped);
    object.addPet(x);
  }

}
4

2 に答える 2

2

すべてのhasNextXXX()呼び出しを取り除き、 nextXXX()に例外をスローさせます。

String petType;
int lineNumber = 0;

while (input.hasNext()) {
    lineNumber++;    
    try {
        petType = input.next();
        if (petType.equals("BIRD")) {
            String name = input.next();
            String owner = input.next();
            double weight = input.nextDouble();
            boolean clipped = input.nextBoolean();
            Bird x = new Bird(name, owner, weight, clipped);
            object.addPet(x);
        }
    }
    catch (NoSuchElementException nse) {
        System.out.println("something is missing in line " + lineNumber);
    }
}

そうは言っても、すべてのhasNextXXX呼び出しを保持し、それらのいずれかがfalseを返した場合は、現在の反復から抜け出す( continueを使用)方がよいと私は主張します。これにより、例外をキャッチするのと同じ効果が得られますが、try/catchを使用するという不必要なオーバーヘッドは発生しません。

私の推測では、あなたの先生はあなたに例外について学んでほしいと思っていますが...

于 2012-11-09T01:20:20.700 に答える
0

フィールドが欠落している場合-input.hasNext()/input.hasNextDouble/input.hasNextBooleanはfalseを返します...とにかくフィールドの存在をチェックしているので、本当に例外をキャッチする必要がありますか?

if 条件のいずれかが失敗した場合は、次の行にスキップできます。

于 2012-11-09T01:21:02.440 に答える