質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
Java

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

Q&A

解決済

2回答

3797閲覧

java文の間違いを教えていただけないでしょうか。

yk-211

総合スコア34

Java

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

0グッド

0クリップ

投稿2015/06/16 03:25

編集2015/06/16 04:09

下記のソースを追加したら実行時システムエラーが出るようになりました。
ですのでここの部分が大きな問題にはなっていると思うのです。

lang

1range = Integer.parseInt (height); 2 if(range>100 && range<300){ 3 super.setErrMsg("身長は100cmから300cmの間で入力してください。"); 4 errExistsFlg = true; 5 }

エラーはjava.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48
となっております。

###前提・実現したいこと
Javaで入力された値に対して、メッセージが出るようなものを
作成しておりまして、体重と身長の範囲を追加で入力してみたのですが、
コンパイルは通り、実行してみるとシステムエラーとなります。
範囲のif文の入れている場所が悪いのでしょうか?
よろしければ教えてください。
ソースも添付させていただきます。

###ソースコード

lang

1/** 2 * ユーザーマスタの新規登録を行います。 3 * 4 * @param request 5 * リクエスト情報 6 * @param con 7 * コネクション 8 * @return 処理結果DTO 9 * @throws Exception 10 */ 11 private ProcessResult doInsert(HttpServletRequest request, Connection con) 12 throws Exception { 13 ProcessResult result = new ProcessResult(); 14 15 String id= request.getParameter("id") ; 16 String name = request.getParameter("name"); 17 String kana = request.getParameter("kana"); 18 String gender = request.getParameter("gender"); 19 String height = request.getParameter("height"); 20 String weight = request.getParameter("weight"); 21 String birthday = request.getParameter("birthday"); 22 String zipCode = request.getParameter("zipCode"); 23 String address = request.getParameter("address"); 24 String phone = request.getParameter("phone"); 25 String deleteFlag = request.getParameter("deleteFlag"); 26 String registTime = request.getParameter("registTime"); 27 int range = 0; 28 29 boolean errExistsFlg = false; 30 // 必須チェック 31 if (StringUtils.isBlank(id.trim())) { 32 super.setErrMsg("顧客IDは必ず入力してください。"); 33 errExistsFlg = true; 34 } 35 if (StringUtils.isBlank(name.trim())) { 36 super.setErrMsg("顧客漢字名は必ず入力してください。"); 37 errExistsFlg = true; 38 } 39 if (StringUtils.isBlank(kana.trim())) { 40 super.setErrMsg("顧客カナ名は必ず入力してください。"); 41 errExistsFlg = true; 42 } 43 if (StringUtils.isBlank(height.trim())) { 44 super.setErrMsg("身長は必ず入力してください。"); 45 errExistsFlg = true; 46 } 47 if (StringUtils.isBlank(weight.trim())) { 48 super.setErrMsg("体重は必ず入力してください。"); 49 errExistsFlg = true; 50 } 51 if (StringUtils.isBlank(birthday.trim())) { 52 super.setErrMsg("生年月日は必ず入力してください。"); 53 errExistsFlg = true; 54 } 55 56 // 文字列数チェック 57 if (StringUtils.chkByte(id, 7)) { 58 super.setErrMsg("顧客IDは7文字で入力してください。"); 59 errExistsFlg = true; 60 } 61 if (StringUtils.chkByte(name, 40)) { 62 super.setErrMsg("顧客漢字名は20文字以内で入力してください。"); 63 errExistsFlg = true; 64 } 65 if (StringUtils.chkByte(kana, 40)) { 66 super.setErrMsg("顧客カナ名は20文字以内で入力してください。"); 67 errExistsFlg = true; 68 } 69 if (StringUtils.chkByte(height, 5)) { 70 super.setErrMsg("身長は5文字以内で入力してください。"); 71 errExistsFlg = true; 72 } 73 range = Integer.parseInt (height); 74 if(range>100 && range<300){ 75 super.setErrMsg("身長は100cmから300cmの間で入力してください。"); 76 errExistsFlg = true; 77 } 78 if (StringUtils.chkByte(weight, 5)) { 79 super.setErrMsg("体重は5文字以内で入力してください。"); 80 errExistsFlg = true; 81 } 82 range = Integer.parseInt (weight); 83 if(range>10 && range<200){ 84 super.setErrMsg("体重は10kgから200kgの間で入力してください。"); 85 errExistsFlg = true; 86 } 87 if (StringUtils.chkByte(birthday, 10)) { 88 super.setErrMsg("生年月日は10文字以内で入力してください。"); 89 errExistsFlg = true; 90 } 91 if (StringUtils.chkByte(zipCode, 7)) { 92 super.setErrMsg("郵便番号は7文字で入力してください。"); 93 errExistsFlg = true; 94 } 95 if (StringUtils.chkByte(address, 120)) { 96 super.setErrMsg("住所は60文字以内で入力してください。"); 97 errExistsFlg = true; 98 } 99 if (StringUtils.chkByte(phone, 13)) { 100 super.setErrMsg("電話番号は13文字以内で入力してください。"); 101 errExistsFlg = true; 102 } 103 104 // 入力制限チェック 105 if (!StringUtils.chkMatch("^[0-9a-zA-Z]+$", id, false)) { 106 super.setErrMsg("顧客IDは半角で入力してください。"); 107 super.setErrMsg("顧客IDは英数字を入力してください。"); 108 errExistsFlg = true; 109 } 110 if (!StringUtils.chkMatch("^[^ -~。-゚]+$", name, false)) { 111 super.setErrMsg("顧客漢字名は全角で入力してください。"); 112 errExistsFlg = true; 113 } 114 if (!StringUtils.chkMatch("^[ァ-ヶ]+$", kana, false)) { 115 super.setErrMsg("顧客カナ名は全角で入力してください。"); 116 super.setErrMsg("顧客カナ名はカタカナを入力してください。"); 117 errExistsFlg = true; 118 } 119 if (!StringUtils.chkMatch("^[0-9]+$", height, false)) { 120 super.setErrMsg("身長は半角で入力してください。"); 121 super.setErrMsg("身長は数字を入力してください。"); 122 errExistsFlg = true; 123 } 124 if (!StringUtils.chkMatch("^[0-9]+$", weight, false)) { 125 super.setErrMsg("体重は半角で入力してください。"); 126 super.setErrMsg("体重は数字を入力してください。"); 127 errExistsFlg = true; 128 } 129 if (!StringUtils.chkMatch("^[0-9]+$", birthday, false)) { 130 super.setErrMsg("生年月日は半角で入力してください。"); 131 super.setErrMsg("生年月日は数字を入力してください。"); 132 errExistsFlg = true; 133 } 134 if (!StringUtils.chkMatch("^[0-9]+$", zipCode, false)) { 135 super.setErrMsg("郵便番号は半角で入力してください。"); 136 super.setErrMsg("郵便番号は数字を入力してください。"); 137 errExistsFlg = true; 138 } 139 if (errExistsFlg) { 140 // 入力チェックでエラーの場合は処理終了 141 result.setUrl(requestPageUrl); 142 result.setNormalEndFlg(false); 143 // 処理モードをセットする。 144 super.setSessionAttribute("processType", "insert"); 145 return result; 146 } 147 148 // ID重複チェック 149 List<CustomerDto> retList = this.getCustomerList(id, con); 150 if (retList.size() > 0) { 151 super.setErrMsg("IDされた顧客IDはすでに存在します。別の顧客IDで再度登録し直してください。"); 152 // 一覧検索画面に戻す。 153 result.setUrl(requestPageUrl); 154 result.setNormalEndFlg(false); 155 // 処理モードをセットする。 156 super.setSessionAttribute("id", id); 157 super.setSessionAttribute("name", name); 158 super.setSessionAttribute("kana", kana); 159 super.setSessionAttribute("gender", gender); 160 super.setSessionAttribute("height", height); 161 super.setSessionAttribute("weight", weight); 162 super.setSessionAttribute("birthday", birthday); 163 super.setSessionAttribute("zipCode", zipCode); 164 super.setSessionAttribute("address", address); 165 super.setSessionAttribute("phone", phone); 166 super.setSessionAttribute("processType", "insert"); 167 return result; 168 } 169 170 CustomerDto paramDto = new CustomerDto(); 171 paramDto.setId(id); 172 paramDto.setName(name); 173 paramDto.setKana(kana); 174 paramDto.setGender(gender); 175 paramDto.setHeight(height); 176 paramDto.setWeight(weight); 177 paramDto.setBirthday(birthday); 178 paramDto.setZipCode(zipCode); 179 paramDto.setAddress(address); 180 paramDto.setPhone(phone); 181 paramDto.setDeleteFlag(deleteFlag); 182 paramDto.setRegistTime(registTime); 183 184 CustomerInsertDao insertDao = new CustomerInsertDao(); 185 insertDao.setParam(paramDto); 186 insertDao.execute(con); 187 188 result.setUrl(requestPageUrl); 189 result.setNormalEndFlg(true); 190 result.setMsg("登録が完了しました。"); 191 192 super.setSessionAttribute("id", id); 193 super.setSessionAttribute("name", name); 194 super.setSessionAttribute("kana", kana); 195 super.setSessionAttribute("gender", gender); 196 super.setSessionAttribute("height", height); 197 super.setSessionAttribute("weight", weight); 198 super.setSessionAttribute("birthday", birthday); 199 super.setSessionAttribute("zipCode", zipCode); 200 super.setSessionAttribute("address", address); 201 super.setSessionAttribute("phone", phone); 202 203 // 処理モードをセットする。 204 super.setSessionAttribute("processType", "insert"); 205 return result; 206 } 207

###補足情報(言語/FW/ツール等のバージョンなど)

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

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

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

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

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

argius

2015/06/16 04:06

システムエラーの詳細を教えてください。どこで発生していますか? どんなエラーですか?
yk-211

2015/06/16 04:14

いつもありがとうございます。 追記で更新いたしました。 また、空欄で登録をしようとした場合に、必須チェックのメッセージは表示されるのですが それ以下の文字列数や身長体重の範囲に関するメッセージは表示されません。 身長体重の範囲を追加する以前は、空欄時全てのエラーメッセージがでておりました。
guest

回答2

0

エラー内容は、数字じゃないものを数字にしようとしてます。
たぶん空文字を数字にしようとしていますね。
request.getParameterが空を返してる可能性があるので、
request.toString()でログを見てみるとよいかもです。

投稿2015/06/16 04:35

MasaakiIrie

総合スコア1021

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

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

yk-211

2015/06/16 04:40

回答ありがとうございます。 そういったエラーだったのですね。 空欄で登録をかけてみているので、 おそらく空であると思います。 実際にログを見てみます。
guest

0

ベストアンサー

java.lang.NumberFormatException: For input string: ""
これがエラーメッセージならば値が入っていない(Empty)です
値が入っていない時に0などを入れるロジックが必要です。

range = Integer.parseInt (height);
range = Integer.parseInt (weight);
また、整数変換していますけどheightとかweightが小数ということはありませんか?
小数点が入ると整数ではないのでエラーになります

ついでに
if(range>100 && range<300){
if(range>10 && range<200){
これだとそれぞれ
100㎝と300cmの間の時、10㎏と200㎏の間のときにエラーメッセージを出しますよ

投稿2015/06/16 04:13

編集2015/06/16 04:17
kutsulog

総合スコア985

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

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

yk-211

2015/06/16 04:18

回答ありがとうございます。 小数点は入力していないので、大丈夫だと思います。 範囲の不等号は間違っておりました。ありがとうございます。 修正しましたが、それでもシステムエラーは解決できませんでした。
yk-211

2015/06/16 04:25

追加でありがとうございます。 そういったロジックを作成すると、空欄チェックに何か影響があったり というのはないのでしょうか。
kutsulog

2015/06/16 04:40

文字数チェックの時に空でないか確認したらいいんじゃないでしょうか? 身長を例にすれば if (StringUtils.chkByte(height, 5)) { super.setErrMsg("身長は5文字以内で入力してください。"); errExistsFlg = true; } range = Integer.parseInt (height); if(range>100 && range<300){ super.setErrMsg("身長は100cmから300cmの間で入力してください。"); errExistsFlg = true; } これを if (StringUtils.chkByte(height, 5) || height.length == 0) { super.setErrMsg("身長は5文字以内で入力してください。"); errExistsFlg = true; }else{ range = Integer.parseInt (height); if(range>100 && range<300){ super.setErrMsg("身長は100cmから300cmの間で入力してください。"); errExistsFlg = true; } } にするとか ※ちゃんとやるならTry{}catch{}するべきでしょう
kutsulog

2015/06/16 04:45

先にコメントした通り0を入れるとするなら if (StringUtils.chkByte(height, 5) || height.length == 0) { super.setErrMsg("身長は5文字以内で入力してください。"); errExistsFlg = true; height = "0"; } としておけば 次の範囲確認で0なので値の範囲異常としてはじいてくれます
yk-211

2015/06/16 04:57

ありがとうございます。 40分にコメントをしていただいたもので実装したところ 出来ました! ただ、身長を範囲外で入力し登録してみたところ、範囲で指定してくださいの メッセージが出るはずのところ、出ずに普通に登録が出来ました。 これはなぜでしょうか。
kutsulog

2015/06/16 05:17

コードを上からコピーしてきたので範囲指定が間違ったままでした ただしくは if (StringUtils.chkByte(height, 5) || height.length == 0) { super.setErrMsg("身長は5文字以内で入力してください。"); errExistsFlg = true; }else{ range = Integer.parseInt (height); if(range<100 || range>300){ super.setErrMsg("身長は100cmから300cmの間で入力してください。"); errExistsFlg = true; } } です 失礼しました
yk-211

2015/06/16 05:32

ありがとうございます。 変更してみたのですが、やはり登録できてしまいました・・・ この箇所以外のとこで間違っているのですかね?
yk-211

2015/06/16 05:41

大変申し訳ありません。 または でしないといけないところを かつ にしておりました。 またはにしたところちゃんと表示させることが出来ました。 本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問