2016-06-22 6 views
-4

例:入力は 'MM/dd/yyyy'の'03/10/2016 'です。合計の日数は69です。2月に28日か29日かを調べるためにうるう年を計算してください。 Javaの年の開始からの日数の計算方法

public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    int Month; 
    int Year; 
    int Day; 
    int cal = 0, num, Tot = 365; 
    System.out.print("Please enter the Month"); 
    Month = input.nextInt(); 
    System.out.print("Please enter the Year"); 
    Year = input.nextInt(); 
    System.out.print("Please enter the Day"); 
    Day = input.nextInt(); 
    if (Month == 2) { 
     if (Year % 4 == 0) 
      num = 29; 
     else 
      num = 28; 
    } else if (Month == 1 || Month == 3 || Month == 5 || Month == 7 
      || Month == 8 || Month == 10 || Month == 12) 
     num = 31; 
    else 
     num = 30; 
    if (Tot != 365) { 
     System.out.println("Not valid"); 
    } else { 
     cal = Tot - Day; 
     System.out.println("Remaining month of Days=" + cal); 
    } 

} 
+0

私たちは、コードの書き込みサービスまたはリクエストではありません機械。特定の問題を尋ねれば、私たちは喜んで – Li357

+1

このCalendar.getInstance()。get(Calendar.DAY_OF_YEAR);を試してみてください。 – Titus

+0

カレンダーを使用しない – Alish

答えて

0

あなたのコードは、いくつかの欠点があります。

  1. 質問は、年初からの日数を要求します。最後に、年末までの残りの日数を計算して出力します。これは同じではありません。
  2. 年の残りの日数を計算するには、入力した日をその年の合計日数から差し引きます。今月は何もしません。あなたはすでに過去のすべての月の日数を累積するべきです。
  3. うるう年がある場合、その年の合計日数は366ではなく366です。
  4. うるう年のチェックは正確ではありません。2000年はうるう年がありませんでした。

私は(私が入った日と月が有効であるかどうかを確認するために運動を残す)これらの点を反映するようにコードを変更しました:

import java.util.Scanner; 

public class DayOfYear { 

    private static int[] MONTH_LENGTHS = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; 

    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 
     int month; 
     int year; 
     int day; 
     int remainingDays = 0, numDays = 0, totalDays = 365; 
     System.out.println("Please enter the Month: "); 
     month = input.nextInt(); 
     System.out.println("Please enter the Year: "); 
     year = input.nextInt(); 
     System.out.println("Please enter the Day: "); 
     day = input.nextInt(); 

     if (isLeapYear(year)) { 
      totalDays++; 
     } 
     for (int iMonth = 1; iMonth < month; iMonth++) { 
      numDays += MONTH_LENGTHS[iMonth]; 
      if (iMonth == 2 && isLeapYear(year)) { 
       numDays++; 
      } 
     } 
     numDays += day; 

     remainingDays = totalDays - numDays; 
     System.out.println("Number of days since start of the year = " + numDays); 
     System.out.println("Remaining days of the year = " + remainingDays); 

    } 

    private static boolean isLeapYear(int year) { 
     return year % 4 == 0 && year != 2000; 
    } 
} 
+0

このプログラムをご利用いただきありがとうございます。これは私にとって完璧な答えです。 – Alish

0

はこれを試してみてください:

public static void main(String[] strings) { 

     Scanner input = new Scanner(System.in); 

     System.out.print("Enter a month number: "); 
     int month = input.nextInt(); 

     System.out.print("Enter a year: "); 
     int year = input.nextInt(); 

     input.close(); 

     LocalDate date = LocalDate.of(year, Month.of(month), 01); 
     int length = date.getMonth().length(false); 

     System.out.print(Month.of(month).getDisplayName(TextStyle.FULL, 
       Locale.US) 
       + " " + year + " has " + length + " days"); 
    } 
関連する問題