2012-12-08 32 views
1

這裏有一個構造函數,用於檢查狀態輸入是否有效。使用一個類來處理錯誤的輸入

public Electronics(String name, double price, int quantity, double weight, boolean frag, String s) 
    { 
     super("Electronics",name,price,quantity,weight); 
     fragile=frag; 
     s=s.toUpperCase(); 
     if(checkState(s)==true) 
     { 
      state=s; 
     } 
     else 
     { 
      out.println("ERROR - not a valid state abbreviation"); 
     } 
    } 

但是在我main(),我有這樣的事情:

public List<Item> shoppingCart = new ArrayList<Item>(); 
temp= new Electronics(name,price,quantity,weight, fragile, state); 
... 
shoppingCart.add(temp); 

所以,即使國家縮寫是無效的,(它只是打印出該狀態是無效的),但對象仍然添加到ArrayList。如果狀態縮寫不正確,我能做些什麼來阻止添加?

+0

如果是無效狀態縮寫你不應該只是打印一個錯誤消息,而是拋出一個IllegalArgumentException?這樣你可以防止添加到列表中,也可以防止在沒有狀態的情況下創建對象 – pabrantes

回答

1

您應該throw an Exception並在您的main()IllegakArgumentException處理它可能是最適合在這裏。

喜歡的東西:

... 
    else 
    { 
     throw new IllegalArgumentException("..."); 
    } 
    ... 

public List<Item> shoppingCart = new ArrayList<Item>(); 
try { 
    temp= new Electronics(name,price,quantity,weight, fragile, state); 
    ... 
    shoppingCart.add(temp); 
} catch (IllegalArgumentException e) { 
    //handle exception 
} 

注意,如果該異常將通過構造函數拋出,該程序將無法達到該元素添加到列表的插入。

0

你需要拋出異常。 IllegalArgumentException異常類似於此。然後,我在構造函數拋出異常,不要將其添加到列表中

0

你的構造函數只是爲了初始化實例variables.have一個單獨的方法類檢查,使其返回一個布爾變量。 構造函數初始化的實例變量:

public Electronics(String name, double price, int quantity, double weight, boolean frag, String s) 
    { 
     super("Electronics",name,price,quantity,weight); 
     fragile=frag; 
     s=s.toUpperCase(); 
    } 

方法,檢查是否到thecheckState()的調用返回真:

public boolean check(){ 
if(checkState(s)==true) 
     { 
      state=s; 
      return true;  
     } 
     else 
     { 
      out.println("ERROR - not a valid state abbreviation"); 
      return false; 
     } 
} 

在主要方法:

public List<Item> shoppingCart = new ArrayList<Item>(); 
temp= new Electronics(name,price,quantity,weight, fragile, state); 
... 
if(temp.check()){ 
shoppingCart.add(temp); 
} 
else { 
    //check returned false 
    }