javaです。1月1日から日数入れると何月何日か出力するプログラム書いたんですがエラーは出ないで動きます。しかし、期待通りに仕事してくれません。
教えてください!
import java.util.Scanner;
class Main{
public static void main(String[] args) {
int[] tsuki = { -1, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int m, d, x;
Scanner sc = new Scanner(System.in);
System.out.print("日を入力してください>>");
x = sc.nextInt();
d = x;
m = 0;
for (int i = 1; i <= 12; i++) {
while(d > 0){
d = d - tsuki[i];
m++;
}
d = d + tsuki[i];
}
System.out.println("1月1日から"+x+"日後は"+m+"月"+d+"日です。");
sc.close();
}
}
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
int i;
for (i = 1; i <= 12 && d > 0; i++) {
d = d - tsuki[i];
m++;
}
d = d + tsuki[i];
ではどうでしょうか。
dが0以下になるまで月をカウントアップして日を減じていきます。
問題
①365以上の入力でおかしな値が出る。
②閏年に対応していない。
No.4
- 回答日時:
元のソースは while の処理が謎すぎますね。
各月の日数を一回ずつ引いてかないと・・・
元のソースを活かすと、こんな感じかな。
うるう年の考慮なし。
インデントは全角スペースで書いてあるので
コピペ時注意。
import java.util.Scanner;
class Main {
public static void main(String[] args) {
int[] tsuki = { -1, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int m, d, x;
Scanner sc = new Scanner(System.in);
System.out.print("日を入力してください>>");
x = sc.nextInt();
d = x;
m = 1; // 最初は1月
// d日後の月と その朔日からのオフセットを求める
for (int i = 1; i <= 12; i++) {
// 残日数がひと月の日数以上なら
// その日数分残日数を減らす
if (d >=tsuki[i]) {
d = d - tsuki[i];
m++;
} else {
// 残日数がひと月未満なら打ち切り。
// それを一日からのオフセット日数とする。
break;
}
}
System.out.println(
"1月1日から" + x + "日後は" + m + "月" + (d+1) + "日です。");
sc.close();
}
}
No.3
- 回答日時:
d から月の日数を引く毎に m を増やしたのはわかりますが、
それならば以下のような処理になるはずです。
m を 1..12 で繰り返し
_ d < tsuki[m] なら「m月d+1日」で決定、繰り返しを抜ける
_ でなければ d -= tsuki[m]
現在のグレゴリオ暦では、うるう年の考慮が必要なので
tsuki の配列を作成する際は注意してください
No.2
- 回答日時:
どこにも年、月が見当たりません。
単純に数値を加算しているだけのようです。
№1様の解答のように dateクラスによって期間計算をするようにしてください。
forループはご希望のようにやってください。
No.1
- 回答日時:
import java.util.Scanner;
import java.util.Calendar;
import java.util.Date;
import java.text.SimpleDateFormat;
public class Main{
public static void main(String[] args) {
Calendar cl = Calendar.getInstance();
cl.set(Calendar.MONTH, 0);
cl.set(Calendar.DATE, 1);
int x;
Scanner sc = new Scanner(System.in);
System.out.print("日を入力してください>>");
x = sc.nextInt();
cl.add(Calendar.DATE, x);
Date date = cl.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("MM'月'dd'日です。'");
System.out.println("1月1日から" + x + "日後は" + sdf.format(date));
sc.close();
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
総称型ArrayList<E>への参照...
-
java 配列
-
countに実行した回数をいれたい...
-
続・ZZZ,ZZZ,ZZ9形式の金額形式...
-
ループ処理の際、最後だけ","を...
-
数値⇒漢数字変換 java
-
フローチャートが作れず、困っ...
-
エラー(互換性の無い型)
-
javaで素数判断プログラム作成...
-
Javaの練習問題
-
Ctrl+Zが入力されると終了する...
-
java キーボード入力された値の...
-
【JAVA <identifier>がありま...
-
複数の数字を計算
-
画面出力の際の繰り返しと入力...
-
九九の表
-
java 電卓のプログラム
-
テキストボックスに入力された...
-
javaプログラミングでの文字化...
-
Java配列でNullPointerExceptio...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ループ処理の際、最後だけ","を...
-
論理演算子”||”またはの入力方法
-
続・ZZZ,ZZZ,ZZ9形式の金額形式...
-
java キーボード入力された値の...
-
総称型ArrayList<E>への参照...
-
JAVAのfor文で困っています。
-
テキストボックスに入力された...
-
Java、2の0乗~10乗の表示
-
コマンドライン引数の例外処理...
-
7つ数字を表示したら改行すると...
-
数値⇒漢数字変換 java
-
countに実行した回数をいれたい...
-
Ctrl+Zが入力されると終了する...
-
Java 入力した整数値の合計を、...
-
繰り返しによる星印の出力
-
配列から最大値・最小値
-
2つのスクロールバーを連動させ...
-
要素数が10の配列で、乱数0~9...
-
2次元配列の並び替え
-
javaです。1月1日から日数入れ...
おすすめ情報