2012-11-09 66 views
0

如果在读取文件时缺少一个字段,我想要捕获NoSuchElementException。如果缺少一个字段,我只需要跳到文件的下一行。我的问题是,我在哪里实现我的try/catch代码来做到这一点?这里是代码:Java抛出NoSuchElementException

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); 
    } 

} 
+0

是否有可能名称丢失,但店主在场? –

回答

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打破当前迭代的。这将获得与捕获异常相同的效果,但是没有使用try/catch的不必要开销。

我的猜测是你的老师只是希望你了解例外,虽然...

0

如果某个字段缺失 - 你input.hasNext()/ input.hasNextDouble/input.hasNextBoolean将返回false .. 。你是否真的需要捕捉一个异常 - 因为无论如何你都在检查野外存在?

如果任何条件失败,您可以跳至下一行。

相关问题