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 回答