1

这是我为 Electronics 提供的一个构造函数,用于检查 State 输入是否有效。

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。如果州缩写不正确,我该怎么做才能停止添加?

4

3 回答 3

1

您应该抛出一个异常并在您的 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
}

请注意,如果构造函数将抛出异常,则程序将无法将元素插入到列表中。

于 2012-12-08T23:23:44.703 回答
0

你需要抛出一个异常。IllegalArgumentException 听起来很像。然后我会构造函数抛出一个异常不要将它添加到列表中

于 2012-12-08T23:25:33.067 回答
0

您的构造函数仅用于初始化您的实例变量。有一个单独的方法类检查使其返回一个布尔变量。构造函数初始化您的实例变量:

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

检查对 checkState() 的调用是否返回 true 的方法:

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
  }
于 2012-12-10T03:28:15.113 回答