(p140) 入力チェックを行う
その8ではエラーチェックの無い干支計算プログラムを示したが、
全角で西暦を入力した場合などは、例外が発生してしまう。
テキストでは半角数値以外の文字列が入力された場合に、
エラー処理を行うプログラムが紹介されている。
eto2.jsp
<%@page contentType="text/html; charset=Windows-31J"%>
<html>
<body>
<h2>干支計算(入力チェック付)</h2>
生まれた年を入力してください。
<form action="../input/EtoServlet2">
西暦<input type="text" name="year">年
<input type="submit" value="計算">
</form>
</body>
</html>
EtoServlet2.java
package chapter10;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.*;
import javax.servlet.http.*;
public class EtoServlet2 extends HttpServlet {
final static String[ ] ETOS = new String[ ] {
"子(ね)", "丑(うし)", "寅(とら)",
"卯(う)", "辰(たつ)", "巳(み)",
"午(うま)", "未(ひつじ)", "申(さる)",
"酉(とり)", "戌(いぬ)", "亥(い)", };
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
String yearStr = request.getParameter("year");
String error = null; // エラーメッセージを管理する参照変数(error)をnullで初期化
String etoText = null; // 計算結果(干支)を管理する参照変数(etoText)をnullで初期化
if (yearStr == null || yearStr.length() == 0) { // 文字列が入力されたかをチェック
error = "何か入れてね";
}
if (error == null) { // 文字が入力された場合
try {
int year = Integer.parseInt(yearStr); // 文字列を数値に変換
if (year < 0) { //
error = "紀元前の人はサポート外です";
} else {
int index = (year + 8) % 12;
etoText = ETOS[index];
}
} catch (NumberFormatException e) {
error = "年を入れてください";
}
response.setContentType("text/plain; charset=Windows-31J");
PrintWriter out = response.getWriter();
if (error != null) {
out.println(error);
} else {
out.println("あなたの干支:" + etoText);
}
}
}
}
情報処理 再チャレンジ ブログ ホーム へ
0 件のコメント:
コメントを投稿