前提・実現したいこと
商品を追加して、削除する処理での例外発生についてです。
商品をListの下から(pos値の大きいほうから)削除を行うと正常に削除されるのですが、ばらばらに削除するとIndexOutOfBoundsExceptionが発生します。削除により要素数が減っていく中でpos値は変わらないので、指定できる範囲外を指定したら例外が発生するということは調べてわかりました。例外が発生しないようにするには1件削除するごとにpos値を更新すればいいのではないかと考えたのですが、この考えは間違っているのでしょうか。間違っていないのであれば更新させる処理を教えていただけないでしょうか。
該当のソースコードは削除処理の部分だけ表示しています。この他にcontrollerクラス、controllerとデータの受け渡しをするformクラス、明細を保持するitemクラスがありますが、文字数の関係で載せることができませんでした。
<tr> <th class="itemradiobtn"><input id="pos1" name="pos" type="radio" value="3"/><label for="pos1"></label></th> 省略 </tr> <tr> <th class="itemradiobtn"><input id="pos2" name="pos" type="radio" value="4"/><label for="pos2"></label></th> 省略 </tr>
削除処理をすると上のvalue値を下のように更新するようにしたいです。
<tr> <th class="itemradiobtn"><input id="pos1" name="pos" type="radio" value="0" checked="checked"/><label for="pos1"></label></th> 省略 </tr> <tr> <th class="itemradiobtn"><input id="pos2" name="pos" type="radio" value="1"/><label for="pos2"></label></th> 省略 </tr>
該当のソースコード
java
1 2 3 4 5 /** 選択した売上明細を削除 */ 6 public static void remove(int pos) { 7 /** int型jを定義しselectListの要素内で繰り返し処理*/ 8 for (int j = 0; j < selectList.size();j++) { 9 10 11 /** 選択したposと同じ順番の要素をselectList内から探す*/ 12 if (pos == selectList.get(j).getPos()){ 13//System.out.println(pos+"I"); 14 15 16 /** 合計からpos番目の小計を引く */ 17 total = total - selectList.get(j).getSubtotal(); 18 19System.out.println(selectList.get(j).getPos()+"R"); 20 21 /** selectListのj番目を削除 */ 22 selectList.remove(selectList.get(j).getPos()); 23 24 break; 25 26 } 27 28 } 29 }
試したこと
pos値をif分の終わりで
pos = selectList.size();
というふうに定義しなおしてみましたが何も変化がなかったのでうまくいってなかったんだろうと思います。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/04 03:49