Как конвертировать из целого числа в месяц, используя массив в Java - PullRequest
0 голосов
/ 28 сентября 2018

Скажем, если пользователю нужно ввести какой-то ввод в целое число, а вывод будет через месяц.

Первая строка ввода - это количество членов в группе.Таким образом, для каждой из следующих строк есть 3 целых числа, которые представляют действительную дату, которая является датой рождения каждого члена в формате дд мм гггг.Если пользователь введет номер для примера 1 01 2018, поэтому вывод будет 1 января 2018.

Это мой код.

import java.util.*;
import java.text.SimpleDateFormat;

public class LabExercise1b {

    public static void main(String[] args) {

        Scanner console = new Scanner(System.in);
        System.out.print(" "); //number of people
        int people = console.nextInt();
        int day, year;
        String[] month = new String[]{"January", "February", "March", "April", "May", "June", "July", "August",
                "September", "October", "November", "December"};

        for (int i = 1; i <= people; i++) {
            SimpleDateFormat newFormat = new SimpleDateFormat("MM");
            System.out.println(" ");
            day = console.nextInt();
            year = console.nextInt();
        }
        System.exit(0);
    }
}

Кстати, я все еще новичок в изучении языка Java,Надеюсь, кто-то может научить меня или поделиться знаниями.Я использую Eclipse IDE.

Ответы [ 3 ]

0 голосов
/ 28 сентября 2018

Месяц в виде перечисления присутствует в API времени Java , который также может использоваться напрямую:

import java.time.Month;
import java.util.Scanner;

public class Test {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        System.out.println(Month.of(num).name());

    }
}

Если вам не разрешено использовать Java-8 или выше.В этом случае вы можете использовать пользовательское перечисление с функцией, которая возвращает значение месяца с данным месяцем в виде целого числа.Например:

enum Month {
    JANUARY(1), 
    FEBRURAY(2),
    MARCH(3),
    APRIL(4),
    MAY(5),
    JUNE(6),
    JULY(7),
    AUGUST(8),
    SEPTEMBER(9),
    OCTOBER(10),
    NOVEMBER(11),
    DECEMBER(12);

    private int value;

    private Month(int value) {
        this.value = value;
    }

    public static Optional<Month> valueOf(int value) {
        return Arrays.stream(values())
                .filter(month -> month.value == value)
                .findFirst();
    }

}

public class Test {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        System.out.println(Month.valueOf(num).get());
    }
}
0 голосов
/ 29 сентября 2018

Я понимаю из вашего кода в вопросе, что вам разрешено использовать встроенный форматер даты.Это тоже хорошая идея.Но: (1) Используйте современные DateTimeFormatter (не устаревшие и не хлопотные SimpleDateFormat).(2) Теперь у вас все получилось, используйте ее для форматирования всей даты (а не только месяца).

    DateTimeFormatter outputFormatter = DateTimeFormatter
            .ofLocalizedDate(FormatStyle.LONG)
            .withLocale(Locale.UK);

    Scanner console = new Scanner(System.in);
    int day = console.nextInt();
    int monthNumber = console.nextInt();
    int year = console.nextInt();
    LocalDate date = LocalDate.of(year, monthNumber, day);
    System.out.println(date.format(outputFormatter));

Пример выполнения:

1 01 2018
01 January 2018

Очень часто можно было бы такжеиспользуйте DateTimeFormatter для анализа пользовательского ввода за один раз, а не для анализа каждого числа в отдельности.Используйте свою поисковую систему, чтобы найти примеры.

Ссылка: Учебное пособие по Oracle: Дата и время , объясняющее, как использовать java.time.

0 голосов
/ 28 сентября 2018

Если ваш ввод 11042018. И вы хотите, чтобы ваш вывод был 11 апреля 2018 года, то выполните что-то вроде этого:

Scanner console = new Scanner(System.in);

String[] month = new String[]{"January", "February", "March", "April", "May", "June", "July", "August","September", "October", "November", "December"};

int input = console.nextInt();

String dateString = input.toString();
String day = dateString.subString(0, 1);
String monthNum = dateString.subString(1, 3);
int intMonthNum = Integer.toString(monthNum);
String year = dateString.subString(3, 7);

System.out.print(day + " ");

if(intMonthNum>0 && intMonthNum <13){
    System.out.print(month[intMonthNum-1]); 
}else{
    System.out.println("Enter correct month number"); 
}

System.out.print(" " + year);
...