Возврат DayOfTheWeek (в виде заглавной строки) из заданного строкового ввода - PullRequest
0 голосов
/ 19 января 2020

Это мой первый раз, когда я смотрю на API даты, я не понимаю, где я ошибаюсь. Вопрос был закомментирован, поэтому вы можете точно увидеть, что ожидалось.

Может кто-нибудь просто объяснить, как решить / подойти к этой проблеме?

Когда я доберусь до класса DateUtil> DayofTheWeek, метод i попытаться вернуть метод LocalDate.DayofTheWeek с помощью поля theDate , которое к настоящему времени было инициализировано. но это не сработает. Он продолжает говорить «не может решить метод»?

public class ChallengeThree {
    public static String dayOfWeek(String date) {
        /**
         *** Returns a String storing the day of the week in all capital letters of the
         * given date String
         * Complete the implementation of the DateUtil class and use it in this function
         * Arguments
         * date - a String storing a local date, such as "2000-01-01"
         * Examples
         * dayOfWeek("2000-01-01") returns "SATURDAY"
         */**

        // ====================================
        // Do not change the code before this

        // CODE1: Write code to return the day of the week of the String date
        //        using the DateUtil class at the bottom of this file

        DateUtil newdates= new DateUtil("2000-01-01");
        System.out.println(newdates.dayOfWeek());
        // ====================================
        // Do not change the code after this
    }

//    public static void main(String[] args) {
//        String theDayOfWeek = dayOfWeek("2000-01-01");
        String expected = "SATURDAY";
        // Expected output is
        // true
//        System.out.println(theDayOfWeek == expected);
//    }
}

class DateUtil {
    LocalDate theDate;

    public DateUtil(String date) {
        /**
         * Initialize the theDate field using the String date argument
         * Arguments
         * date - a String storing a local date, such as "2000-01-01"
         */

        // ====================================
        // Do not change the code before this


        LocalDate theNewDate = LocalDate.parse(date);
        this.theDate=theNewDate;
        // ====================================
        // Do not change the code after this
    }

    public String dayOfWeek() {
        /**
         * Return a String the day of the week represented by theDate
         */

        // ====================================
        // Do not chDate theDate = new ange the code before this

         return LocalDate.of(theDate).getDayOfWeek();
        // ====================================
        // Do not change the code after this
    }
}

Ответы [ 3 ]

1 голос
/ 19 января 2020

Вы делаете это слишком сложным.

Одной из проблем является то, что вы мыслите в тексте, используя тупые строки, а не умные объекты. Не передавайте вокруг строки "2000-01-01", передавайте вокруг объекта LocalDate. Не передавайте строку SATURDAY, обойдите объект DayOfWeek.SATURDAY.

LocalDate
.parse(
    "2000-01-01"
)
.getDayOfWeek()
.equals(
    DayOfWeek.SATURDAY 
)

Если вы настаиваете на использовании строк вопреки моему совету, вы можете получить имя объекта перечисления DayOfWeek в виде текста, вызвав toString.

String output = DayOfWeek.SATURDAY.toString() ;

Идет в другом направлении, звонит DayOfWeek.valueOf.

DayOfWeek dow = DayOfWeek.valueOf( "SATURDAY" ) ;
0 голосов
/ 19 января 2020

Остальные ответы в порядке. Я хотел, чтобы go был ближе к тому, что вы спросили:

Он все время говорит: «Не удается разрешить метод»?

Как вы уже видели, появляется сообщение об ошибке эта строка:

     return LocalDate.of(theDate).getDayOfWeek();

Метод, который он не может разрешить, является of(). LocalDate имеет несколько перегруженных of методов. theDate уже является LocalDate, и, как MadProgrammer сказал в комментарии, нет of метода, принимающего LocalDate. Это причина сообщения об ошибке. Кстати, сообщение, которое я получаю в Eclipse, гласит: «Метод (int, Month, int) в типе LocalDate не применим для аргументов (LocalDate)».

Поскольку theDate уже является LocalDate, этот метод не нужен вообще. Просто оставьте это и позвоните getDayOfWeek() по theDate напрямую (я специально оставляю вас наедине, чтобы вставить это в код; вы должны научиться делать это, так что именно вы должны это делать).

Похоже, у вас возникла другая проблема: LocalDate.getDayOfWeek() возвращает DayOfWeek, а ваш DateUtil.dayOfWeek() должен возвращать String. Скорее всего, вы сможете решить это сами, когда дойдете до этого. Если нет, не стесняйтесь следить за комментариями.

В качестве полного текста для производственного кода я бы рассмотрел класс DateUtil для этой цели излишним. Я понимаю, что это задание, поэтому я ответил на него, будучи верным заданию.

0 голосов
/ 19 января 2020

Отредактировано

Я внес небольшое изменение в ваш код (это сработало)

DateUtil

class DateUtil {

private LocalDate date;

public DateUtil(LocalDate date) {
    this.date = date;
}

public String dayOfWeek() {
    return String.valueOf(date.getDayOfWeek());

    }
}

ChallengeThree

public class ChallengeThree {

public static void main(String[] args) {

    String theDayOfWeek = dayOfWeek("2000-01-01");
    System.out.println(theDayOfWeek);

}

public static String dayOfWeek(String date) {

    LocalDate localDate = LocalDate.parse(date);
    DateUtil dateUtil = new DateUtil(localDate);
    return dateUtil.dayOfWeek();

  }

}
...