ちょっと先の未来クイズ第5問

jspの"year"パラメータから生年を受け取って干支を表示するプログラムなのですが、
計算(year + 8)%12の所でなぜ「+8」をするのか分かりません。
技術的といいますか算数レベルの問題ですが
どなたかご教授をお願いいたします。
ちなみに自分なりの考えだと紀元前1年が申にあたるからでしょうか?
だとしても何かスッキリしません。
宜しくお願いいたします。

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class EtoServlet extends HttpServlet{

//インデントしてなく見難いですが・・・。すみません。。。。
private final String [] ETOS = {"子","丑","寅","卯","辰","巳","午",
"未","申","酉","戌","亥"};
public void doGet(HttpServletRequestrequest,HttpServletResponse response)
throws IOException, ServletException{
String yearStr = request.getParameter("year");
int year = Integer.parseInt(yearStr);
int index = (year + 8) % 12;
String etoText = ETOS[index];
response.setContentType("text/plain;charset=Shift_JIS");
PrintWriter out = response.getWriter();
out.println("あなたの干支は "+etoText + "デス");
}
}

A 回答 (2件)

>自分なりの考えだと紀元前1年が申にあたるからでしょうか?


大正解です。
ちなみに、
private final String [] ETOS = {"子","丑","寅","卯","辰","巳","午",
"未","申","酉","戌","亥"};

private final String [] ETOS = {"申","酉","戌","亥","子","丑","寅",
"卯","辰","巳","午","未",};
にすれば、8を足す必要がなくなり、余分な計算を減らせます。
こっちのほうが「スッキリ感」があるかも。
    • good
    • 0
この回答へのお礼

迅速な回答有難うございます。
"申"~"未"で考えたほうが簡単ですね。
紀元前1年==西暦0年(ないですが)==配列の添字0
ってな思考で考えるとスッキリします。

>>大正解です
自分なりに考えていてもモヤモヤ感がありましたが
こう言ってもらえるとスッキリ 納得できました。
有難うございました。

お礼日時:2007/02/12 15:15

>ちなみに自分なりの考えだと紀元前1年が申にあたるからでしょうか?


まぁOK(紀元0年は存在しないため、紀元前1年は申、紀元1年が酉。
配列の添字は0から11まで)

紆余曲折があったようでもあり、断言しづらいけど
http://ja.wikipedia.org/wiki/%E7%B4%80%E5%85%83
#自分は紀元1年が酉だと考えたけど、同じこと。
    • good
    • 0
この回答へのお礼

早速 回答有難うございます
そうですね
添字が0~
紀元前1~
ということで改めて確認できました
有難うございました

お礼日時:2007/02/12 15:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A