- 締切済み
元旦からの日数を入力して、何月何日かを出力する。うるう年ではない年として計算してよい。
72を入力して、3月13日を出力するプログラムがうまくいきませんどうすればいいですか。この課題は明日が締め切りです
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- den256
- ベストアンサー率70% (7/10)
for文 や if文 は必要ないプログラムです。それらを用いてコーディングしたい場合は、他の方が提案されているアルゴリズムでコーディングされた方がいいと思います。 ちなみに基準日と加算日数を自由に変更できるようにする場合は、次になると思います。 import java.util.Calendar; public class ReturnDate { /** * @param args */ public static void main(String[] args) { String strDateOfStart = getStringFromSystemIn("Enter the Date of Start. Format(9999/99/99) > "); String strNumberOfDateForAdd = getStringFromSystemIn("Enter the Number of Date for add. Format(99) > "); Calendar objStartDate = Calendar.getInstance() ; objStartDate.set( (new Integer(strDateOfStart.substring(0, 4))).intValue(), (new Integer(strDateOfStart.substring(5, 7))).intValue(), (new Integer(strDateOfStart.substring(8, 10))).intValue()); objStartDate.add(Calendar.DATE,-1); objStartDate.add(Calendar.DATE, (new Integer(strNumberOfDateForAdd.trim())).intValue()); System.out.println( objStartDate.get(Calendar.YEAR)+"年"+ objStartDate.get(Calendar.MONTH)+"月"+ objStartDate.get(Calendar.DATE)+"日"); } private static String getStringFromSystemIn(String strMassage){ System.out.print(strMassage); int intLength = 0; byte bytBuffer[] = new byte[256]; try{ intLength = System.in.read(bytBuffer); }catch(Exception ex){ System.out.println(ex); } return new String(bytBuffer,0,intLength); } } 英語の部分が間違っていたらすみません。なんとなく書いたので正しいかどうかはご自分で確かめてください。
- stiffels
- ベストアンサー率34% (25/72)
こういう計算には公式があります。 3月1日を起点として14月まである設定とすると 3月~13月までは31日、30日と同じ繰り返しで進みます。 これを逆に利用すれば比較的簡単に日数から月日を引き出すことができます。
- den256
- ベストアンサー率70% (7/10)
den256 と申します。 私なりの答えを考えてみました。 import java.util.Calendar; public class ReturnDate { /** * @param args */ public static void main(String[] args) { Calendar objStartDate = Calendar.getInstance() ; objStartDate.set(2007,1,1); objStartDate.add(Calendar.DATE, 72); System.out.println( objStartDate.get(Calendar.YEAR)+"年"+ objStartDate.get(Calendar.MONTH)+"月"+ objStartDate.get(Calendar.DATE)+"日"); } } 結果は、 2007年3月14日 です。 これだとうるう年も対応してくれるようです。 それと計算の設定日の翌日から 72 日目を返すみたいですね。 それに対応する場合は、 objStartDate.set(2007,1,1); objStartDate.add(Calendar.DATE, -1); objStartDate.add(Calendar.DATE, 72); でいいかもしれないです。 Java の Calendar クラスを使うよりも自分でアルゴリズムを考えたほうが勉強になるかも知れないですね。
- pcbeginner
- ベストアンサー率46% (261/560)
1.入力した値を取得するところがわからない 2.入力した値を数値に変換するところがわからない 3.java.util.GregorianCalendarって何? 4.APIって何? 5.ifって何? 6.javaって何? 7.プログラムって何? 8.そもそも日本語がわからない。 1~8のどれでしょうか。 6以降だと「詰み」ですが…
- misan007
- ベストアンサー率11% (1/9)
分かりやすいやりかただと、入力をaとして if(a=1~31) 1月a日 と出力。 if(a=32~60) 2月a-31日 if(a=61~92) 3月a-61日 ・ ・ ・ if(a=334~365) 12月a-334日 とすればいいと思います。
補足
すみません、このプログラム作成に当たって全体がよくわからないです。
- pcbeginner
- ベストアンサー率46% (261/560)
わかるところまで作って課題を出す。 できた友人に見せてもらって課題を出す。 先生(課題を出した人)に聞く。 ここで聞くなら、「何がどうわからない。」「こうしたけどこうなった。」などを書かないとダメですよ。 ひょっとしたら java.util.GregorianCalendarクラスのAPI を熟読すると幸せになれるかもしれません。
お礼
ありがとうございます。早速試してみます
補足
このプログラムでfor文やif文やwhile文ではどういう風になりますか