Найти "дату" из таблицы - PullRequest
0 голосов
/ 01 мая 2018

Я хочу создать «Таблицу», похожую на календарь со всеми месяцами и днями с 1 по 31. Но я хочу сделать следующее: если пользователь выбирает месяцы и день, он должен дать вам число (не случайное), например

Days | Ene | Feb | Mar
----------------------
1   | A1 | A4  | A7
---------------------
2   | A2  | A5  | A8
---------------------
3   | A3  | A6  | A9
---------------------

Если пользователь напишет или выберет Ene 1, он получит A1 или 2 февраля, получит A5 (и так далее). Вот вопросы, как мне это построить? PHP? Javascript? Джава? Используя базы данных SQL / Data?

1 Ответ

0 голосов
/ 05 августа 2018

ТЛ; др

map.get( Month.FEBRUARY ).get( 2 - 1 )

A5

Java

Month enum

Во-первых, вы должны знать, что Java заранее определила набор из 12 объектов для месяцев в перечислении Month. Кстати, средство enum в Java гораздо более мощное и гибкое, чем обычно в большинстве языков; Вы можете узнать больше .

Кстати, вы можете попросить класс Month автоматически локализовать название месяца с помощью метода getDisplayName.

List

Ваши числа равны 1, 2, 3, поэтому мы можем использовать их для доступа к List.

К сожалению, доступ к List предоставляется только в виде индекса, что означает отсчет на основе 0 (неудачное похмелье с первых дней программирования). Поэтому мы должны вычесть одно из числа дня месяца. Например, для 1-го используйте 0, для 2-го используйте 1.

Map

Мы можем сопоставить каждый месяц его списку значений, используя Map.

Коллекция литералов

Java 9 предоставляет новые удобные методы Map.ofEntries и List.of для краткой генерации немодифицируемых коллекций.

Map< Month, List< String > > map = 
    Map.ofEntries(
        entry( Month.JANUARY , List.of( "A1" , "A2" , "A3" ) ) ,  // This syntax requires at top:    import static java.util.Map.entry ;
        entry( Month.FEBRUARY , List.of( "A4" , "A5" , "A6" ) ) ,
        entry( Month.MARCH , List.of( "A7" , "A8" , "A9" ) )
    )
;

Доступ к Map и List

Попробуйте. Имитация ввода пользователем месяца и дня.

Month m = Month.FEBRUARY;
int dayOfMonth = 2;

Или получите месяц по номеру 1-12 за январь-декабрь.

Month m= Month.of( 2 );

Получите доступ к Map, чтобы получить List за месяц Передача объекта Month возвращает нас к объекту List, который мы поместили на карту.

List< String > list = map.get( m );

Получите доступ к List, чтобы получить желаемый String, например A5.

String result = list.get( dayOfMonth - 1 );  // Subtract one for zero-based index. 

Или объедините эти две строки в одну, чтобы получить доступ к Map и List.

String result = map.get( m ).get( dayOfMonth - 1 ); // One-liner, alternative.

A5

Давайте посмотрим весь этот код вместе.

Map< Month, List< String > > map = Map.ofEntries(
        entry( Month.JANUARY , List.of( "A1" , "A2" , "A3" ) ) ,  // This syntax requires at top:    import static java.util.Map.entry ;
        entry( Month.FEBRUARY , List.of( "A4" , "A5" , "A6" ) ) ,
        entry( Month.MARCH , List.of( "A7" , "A8" , "A9" ) )
);

Month m = Month.FEBRUARY;                             // Or, Month.of( 2 )
int dayOfMonth = 2;

List< String > list = map.get( m );                   // Passing a `Month` object gets us back the `List` object we had put into the map.
String result = list.get( dayOfMonth - 1 );           // Subtract one for zero-based index counting to access `List`. 

String result2 = map.get( m ).get( dayOfMonth - 1 );  // One-liner, alternative.
...