javaで商品管理売上管理システムを作っています。
1画面目で選択した商品名のリストをindexOf()で検索すると、
データは存在しているのに-1が返ってきてしまい、
その後の処理でエラーを吐いてしまいます。
SalesSystemController.javaのaddメソッド内
Item newList = RecordManager.findItem(form.getGoodsName());
でRecordManager.javaのfindItemメソッドに入り、
int index = list.indexOf(new Item("", goodsName, 0,0,0));
でindexにー1が入ってしまいます。
デバッグでみると、findItemメソッドのgoodsNameにはきちんと商品名(油性ボールペンなど)が入っています。
ここが通らないとその先が何もできないのですが、解決方法が分かる方がいましたら教えてください。
よろしくお願いいたします。
開発環境等
eclipse
Windows10
tomcat8
エラーメッセージ:
Request processing failed; nested exception is java.lang.ArrayIndexOutOfBoundsException: -1
java
1SalesSystemController.java 2 3@Controller 4@RequestMapping(value = "/system") 5public class SalesSystemController { 6 7 private static final String INIT = "init"; // 初期画面 8 private static final String ADD = "add"; // 明細追加画面 9 private static final String FIX = "fix"; // 売上登録画面 10 11***********初期画面表示前の処理記述あり。*********** 12 13 @RequestMapping(params = "add") 14 public String add(SalesForm form, Model model) { 15 // 数値でない場合、未入力の場合はcatchへ遷移 16 try { 17 int point = Integer.parseInt(form.getPoint()); 18 // 1未満or100以上の場合はエラーメッセージ表示 19 if (point < 1 || point > 100) { 20 model.addAttribute("error", "点数には 1 以上 100 以下の整数を入力してください。"); 21 return INIT; 22 }else { 23 // 商品名の売上点数取得 24 Item newList = RecordManager.findItem(form.getGoodsName()); 25 int oldPoint = newList.getQuantity(); 26 // 売上点数+point 27 point = point + oldPoint; 28 newList.setQuantity(point); 29 // リストの該当商品に新データをセット 30 RecordManager.updateItem(newList); 31 32 // formデータ設定 33 model.addAttribute("allList", RecordManager.getItemList()); // 商品データ取得 34 model.addAttribute("nameList", RecordManager.makeNameList()); // 商品名リスト設定 35 model.addAttribute("message", "明細に追加しました。"); // メッセージ設定 36 model.addAttribute("error", ""); // エラー設定 37 form.setGoodsName(RecordManager.getFirstGoodsName()); // 商品名初期値設定 38 return ADD; 39 } 40 } catch (NumberFormatException e) { 41 model.addAttribute("error", "点数には 1 以上 100 以下の整数を入力してください。"); 42 return INIT; 43 } 44 }
java
1RecordManager.java 2 3public final class RecordManager { 4 5 /** 商品データ */ 6 private static final List<Item> list = new ArrayList<Item>(); 7 static { 8 list.add(new Item("A00101", "油性ボールペン", 60, 0, 0)); 9 list.add(new Item("A00201", "極細ボールペン", 120, 0, 0)); 10 list.add(new Item("A00301", "蛍光ペン6色セット", 420, 0, 0)); 11 list.add(new Item("A00401", "シャープペンシル", 100, 0, 0)); 12 list.add(new Item("A00501", "鉛筆H(1ダース)", 400, 0, 0)); 13 list.add(new Item("B00101", "無線綴ノートA4", 100, 0, 0)); 14 list.add(new Item("B00201", "リングノートA4", 120, 0, 0)); 15 list.add(new Item("B00301", "領収書", 350, 0, 0)); 16 list.add(new Item("C00101", "はさみ(青)", 128, 0, 0)); 17 list.add(new Item("C00201", "ステープラー", 338, 0, 0)); 18 list.add(new Item("C00301", "2穴パンチ", 128, 0, 0)); 19 list.add(new Item("C00401", "ゼムクリップ", 98, 0, 0)); 20 list.add(new Item("C00501", "消しゴム", 58, 0, 0)); 21 } 22 23 /** 24 * 引数で指定された商品名に一致する商品データを返却 25 * @param name 検索キーとなる商品名 26 * @return 検索結果の商品データ 27 */ 28 public static Item findItem(String goodsName) { 29 int index = list.indexOf(new Item("", goodsName, 0,0,0)); 30 return list.get(index); 31 }
回答3件
あなたの回答
tips
プレビュー