1

State 入力が有効かどうかをチェックする Electronics 用のコンストラクターを次に示します。

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

例外をスローして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();
    }

thecheckState() への呼び出しが 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 に答える