dポイントプレゼントキャンペーン実施中!

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件)

int i;


for (i = 1; i <= 12 && d > 0; i++) {
d = d - tsuki[i];
m++;
}
d = d + tsuki[i];
ではどうでしょうか。
dが0以下になるまで月をカウントアップして日を減じていきます。
問題
①365以上の入力でおかしな値が出る。
②閏年に対応していない。
    • good
    • 0

元のソースは 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();
  }
}
    • good
    • 0

d から月の日数を引く毎に m を増やしたのはわかりますが、


それならば以下のような処理になるはずです。

m を 1..12 で繰り返し
_ d < tsuki[m] なら「m月d+1日」で決定、繰り返しを抜ける
_ でなければ d -= tsuki[m]

現在のグレゴリオ暦では、うるう年の考慮が必要なので
tsuki の配列を作成する際は注意してください
    • good
    • 0

どこにも年、月が見当たりません。


単純に数値を加算しているだけのようです。
№1様の解答のように dateクラスによって期間計算をするようにしてください。
forループはご希望のようにやってください。
    • good
    • 0

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();
 }
}
    • good
    • 0

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