Member 13994213 Ответов: 2

Как распечатать конкретную дату, когда пользователь вводит число из 365


Напишите программу под названием DayFunctions, которая включает в себя следующие методы. Он должен иметь main, который позволяет вызывать эти два метода со значениями, вводимыми пользователем

Строка getMonthDay(int dayNumber)
Этот метод принимает в качестве параметра число дней в году. Предположим, что это не високосный год. Возвращаемая строка может быть либо в формате “1/1”, либо “1 января”

int getDayNumer(int месяц, int день)
Это возвращает номер дня за год. Например, 1 января-это 1, а 31 января-это 31.
это и есть назначение

Что я уже пробовал:

import java.util.Scanner;
public class DayNumbers {
    private static int[] firstDayNumbers = new int[] {-1,1,32,60,91,121,152,182,213,244,274,305,335            
    };
    private static int getDayNumber(int month,int day) {
    
        int x = firstDayNumbers[month];  
         x = x+day-1;
         return x;
        }
    public static String getMonthDay(int dayNumber) {
    
        String[] months = {"jaunuary", "Febuary", "March", "April", "May", "June", "july", "August", "September", "October", "November", "December"}; 
        
        String i=null;
        if (dayNumber <= 31) {
            i = months[0];
        } else if (dayNumber <= 59 ) {
            i = months[1];
        }else if (dayNumber <= 90) {
            i = months[2];
        }else if (dayNumber <= 120) {
            i = months[3];
        }else if (dayNumber <= 151 ) {
            i = months[4];
        }else if (dayNumber <= 181) {
            i = months[5];
        }else if (dayNumber <= 212) {
            i = months[6];
        }else if (dayNumber <= 243) {
            i = months[7];
        }else if (dayNumber <= 273 ) {
            i = months[8];
        }else if (dayNumber <= 304) {
            i = months[9];
        }else if (dayNumber <= 334) {
            i =months[10];
        }
        String day = null;
        int m = 0;
    
        
        if (m == 2) {
            day += 31;
        } else if (m == 3) {
            day += 59;
        } else if (m == 4) {
            day += 90;
        } else if (m == 5) {
            day += 31 + 28 + 31 + 30;
        } else if (m == 6) {
            day += 31 + 28 + 31 + 30 + 31;
        } else if (m == 7) {
            day += 31 + 28 + 31 + 30 + 31 + 30;
        } else if (m == 8) {
            day += 31 + 28 + 31 + 30 + 31 + 30 + 31;
        } else if (m == 9) {
            day += 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31;
        } else if (m == 10) {
            day += 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30;
        } else if (m == 11) {
            day += 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31;
        } else if (m == 12) {
            day += 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30;
        }
    

    
    }
    public static void main(String[] args) {
        int dayNumber=156;
        String d= getMonthDay(dayNumber);
        System.out.println(""+d);
        
    }

}

2 Ответов

Рейтинг:
2

Maciej Los

Прочесть OriginalGriff[^] ответьте очень внимательно и подумайте об этом! Число дней в месяце хорошо известно. Есть только один месяц, который может вернуться 28 или 29 дней. Итак, вы должны рассчитать, является ли текущий год високосный год[^]. Как?

Цитата:
Алгоритм

Следующий псевдокод определяет, является ли год високосным или обычным годом в григорианском календаре (и в пролептическом григорианском календаре до 1582 года). Тестируемая переменная year-это целое число, представляющее число года в григорианском календаре, и тесты организованы так, чтобы сначала отправлять наиболее распространенные случаи. Следует позаботиться о переводе математической целочисленной делимости на конкретные языки программирования.

if (year is not divisible by 4) then (it is a common year)
else if (year is not divisible by 100) then (it is a leap year)
else if (year is not divisible by 400) then (it is a common year)
else (it is a leap year)


Итак, если кто-то наберет 75, то
а) для обычного года это будет: 31 день января + 28 дней февраля + 16 дней марта; результат: 16 марта
Б) для високосного года это будет: 31 день января + 29 дней февраля + 15 дней марта; результат: 15 марта

Теперь это стало яснее?


Рейтинг:
0

OriginalGriff

1) "Январь" не пишется как "jaunuary"
2) getMonthDay не возвращает значение.
3) Вы генерируете значение в i, а затем игнорируете его.
4) Ваш if условия никогда не будут совпадать, так как вы устанавливаете m до нуля, прежде чем начать.

Вместо длинного теста if используйте свой массив: простой цикл, ищущий последнее значение, которое dayNumber меньше, чем скажет вам, какой месяц. Это как индекс в массиве месяцев дает вам имя месяца, а вычитание даст вам день месяца.


Maciej Los

5ed!