質問するログイン新規登録
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

解決済

2回答

1828閲覧

一つでも在庫を超える商品が存在すればエラーメッセージをだす、というプログラム

poporian_a

総合スコア8

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

0クリップ

投稿2020/05/18 12:13

編集2020/05/18 12:25

0

0

実現したいこと

ショッピングカートのプログラムを作っています。
今行いたいのは、注文個数が在庫を上回ったらエラーメッセージをだす、という工程です。
現段階では、全商品に超過個数をいれればエラーメッセージはでます。
そうではなくて、一つでも超過個数のある商品が存在すればエラーメッセージをだす、というプログラムにしたいです。
条件式の書き方をどのように工夫すれば良いでしょうか?
イメージ説明も添付します。

該当のソースコード

@WebServlet("/StockServlet") public class StockServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { //入力された注文個数を取得 req.setCharacterEncoding("UTF-8"); //商品ごとに違うので配列を作る List<Number> no = new ArrayList<Number>(); String[] values=req.getParameterValues("number"); for(int i=0;i<values.length;i++) { int number = Integer.parseInt(values[i]); no.add(new Number(number)); } try {      //データベース接続 ConnectionDb db = new ConnectionDb(); db.conn(); //商品リスト一覧表示のための配列リスト_このリストに在庫データあり List<Stock> list = new ArrayList<Stock>(); String query = "SELECT S.ITEM_ID,ITEM_NAME,STOCK,PRICE " + "FROM PRODUCT_NAME AS N " + "JOIN PRODUCT_STOCK AS S " + "ON N.ITEM_ID = S.ITEM_ID " + "JOIN PRODUCT_PRICE AS P " + "ON S.ITEM_ID = P.ITEM_ID "; PreparedStatement stmt = db.con.prepareStatement(query); ResultSet rs = stmt.executeQuery(); int counter = 0; while (rs.next()) { String itemName = rs.getString("ITEM_NAME"); int price = rs.getInt("PRICE"); int stock = rs.getInt("STOCK"); String itemId = rs.getString("ITEM_ID"); Number numbr = no.get(counter); list.add(new Stock(stock,itemName,price,itemId,numbr)); counter++; } req.setAttribute("stocks", list); //入力個数が在庫を上回っていなければtrue↓ boolean isOver = false; for(int i=0; i < list.size(); i++) { if( list.get(i).getStock() > Integer.parseInt(values[i])) { isOver = true; } } if(isOver) { RequestDispatcher dispatcher = req.getRequestDispatcher("/WEB-INF/stockOK.jsp"); dispatcher.forward(req, res); } else { req.setAttribute("stockErrorMsg", "在庫がありません"); req.setAttribute("products", list); RequestDispatcher rd = req.getRequestDispatcher("/WEB-INF/list.jsp"); rd.forward(req, res); } rs.close(); stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } }

イメージ説明

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/05/18 12:14

どこに在庫データを持ってるのでしょう
poporian_a

2020/05/18 12:16

MySQL ワークベンチです。 全コード載せます。
m.ts10806

2020/05/18 12:18

ワークベンチはツールに過ぎません。そこにデータを持っているわけではないですよ。
poporian_a

2020/05/18 12:20

配列のlistに入っています。
guest

回答2

0

個数が超えているものが見つかった時点でエラーであることが確定するので、その時点でループを終了すればいい。

java

1 boolean isShort = false; 2 for(int i=0; i < list.size(); i++) { 3 if( list.get(i).getStock() < Integer.parseInt(values[i])) { 4 isShort = true; 5 break; 6 } 7 }

投稿2020/05/18 17:09

swordone

総合スコア20675

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

poporian_a

2020/05/18 22:47

なるほど!!理解しました。 わかりやすくて助かります。 ありがとうございました!
guest

0

ベストアンサー

解決策1
isOver ではなく、在庫切れありフラグに変更して、在庫切れの時に、trueにする。

java

1 // 在庫切れがあったらtrue 2 boolean isShortage = false; 3 for (int i=0; i < list.size(); i++) { 4 if (list.get(i).getStock() < Integer.parseInt(values[i])) { 5 isShortage = true; 6 } 7 } 8

解決策2
在庫がある場合、isOver をtrueとのANDにする。

java

1 // 入力個数が全て在庫を上回っていなければtrue 2 boolean isOver = true; 3 for (int i=0; i < list.size(); i++) { 4 if (list.get(i).getStock() > Integer.parseInt(values[i])) { 5 isOver &= true; 6 } else { 7 isOver = false; 8 } 9 } 10

コードは未検証です。
また、在庫が注文数丁度の場合の処理が、1と2で違うので、本来の仕様に合わせてください。

投稿2020/05/18 12:49

YT0014

総合スコア1832

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

poporian_a

2020/05/18 13:02

ご丁寧な回答、誠にありがとうございます。 おかげで解決致しました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問