Дополнительные выходы в программе при использовании перегрузки метода - PullRequest
0 голосов
/ 05 июля 2019

Я делаю программу, в которой есть два метода с одинаковым именем, использующие перегрузку методов, особенности: -

1-й метод: - Name-getDurationString Параметры-минуты (проверьте, если> = 0) и секунды (проверьте> = 0 и <= 59) если TRUE, конвертировать минуты и секунды в их эквивалент часы, минуты и секунды и вернуть строку в формате "XX" h "YY" m "ZZ" s. </p>

если FALSE, вернуть строку "неверное значение"

2-й метод: - Name-getDurationString Параметры-секунды (проверьте, если> = 0) если TRUE, конвертировать секунды в их эквивалент минуты и секунды и вернуть строку в формате "YY" m "ZZ" s. Также вызовите 1-й метод с исправленным минуты и секунды.

если FALSE, вернуть строку "неверное значение"

Вызовите оба метода из основного метода.

Проблема: - При запуске кода вместо 3 выводов получаю 5.

public class MinutesAndSeconds {

public static void main(String[] args){
    getDurationString(120,58);
    getDurationString((7200));
}

public static  String getDurationString(int minutes,int seconds){
    if(minutes>=0 && seconds>=0 && seconds<=59){
        int hours=minutes/60;
        int remaingMinutes=(minutes%60);
        String i = hours + " h " + remaingMinutes + " m " + seconds +" s";
        System.out.println(i);
        return i;
    }
    else return "invalid value";

}

// 2nd method(overloading)
public static  String getDurationString(int seconds){
    if(seconds>=0){
        int correctedMinutes=(seconds/60);
        int correctedSeconds=seconds%60;
        String i = correctedMinutes + " m " + correctedSeconds + " s";
        System.out.println(i+"\n"+getDurationString(correctedMinutes,correctedSeconds));

        return (i+"\n"+getDurationString(correctedMinutes,correctedSeconds));
    }
    else return "invalid value";

}

}

Ожидаемый: - **

  • 2 ч 0 м 58 с
  • 120 м 0 с
  • 2 ч 0 м 0 с

**

Фактическое: -

  • 2 ч 0 м 58 с
  • 2 ч 0 м 0 с
  • 120 м 0 с
  • 2 ч 0 м 0 с
  • 2 ч 0 м 0 с

Ответы [ 2 ]

0 голосов
/ 05 июля 2019

Я думаю, что ваша главная проблема в этом коде - это тормоза Принцип единой ответственности ; Вы должны разделить задачу расчета и задачу вывода. В этом случае вы никогда не получите неожиданные побочные эффекты. Посмотрите на фрагмент ниже:

public static void main(String[] args) {
    System.out.println(getDurationString(120, 58)); // 02h 00m 58s
    System.out.println(getDurationString(7200));    // 02h 00m 00s
}

public static String getDurationString(int minutes, int seconds) {
    if (minutes >= 0 && seconds >= 0 && seconds <= 59)
        return getDurationString(minutes * 60 + seconds);
    return "invalid value";
}

public static String getDurationString(int seconds) {
    if (seconds < 0)
        return "invalid value";

    int hours = seconds / 3600;
    int minutes = seconds % 3600 / 60;
    seconds = seconds % 3600 % 60;

    return String.format("%02dh %02dm %02ds", hours, minutes, seconds);
}
0 голосов
/ 05 июля 2019

Проблема в следующих строках:

System.out.println(i+"\n"+getDurationString(correctedMinutes,correctedSeconds));

return (i+"\n"+getDurationString(correctedMinutes,correctedSeconds));

getDurationString() вызывается в каждом.

Чтобы получить тот же эффект без нескольких вызовов, сохраните возвращенное значение и распечатайте его позже:

String result = getDurationString(correctedMinutes,correctedSeconds);
System.out.println(i+"\n"+result);
return i+"\n"+result;

Что также улучшает читабельность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...