Что является правильным оператором return, кроме return secondpass? - PullRequest
0 голосов
/ 10 января 2020

Какой правильный оператор возврата, кроме return secondpass?

Почему возможно return secondpass, и при этом все еще не может быть ошибок, отображаемых в IDE IntelliJ и иметь возможность работать?

 public static void main(String[] args) {
    getDurationString(5,2);
}

public static int getDurationString(int minutes, int seconds) {
    if (minutes < 0 || seconds < 0 && seconds > 59) {
        System.out.println("Invalid value");
    }
    int hourtomin = (60/minutes);
    int secondspass = (seconds/seconds);
    System.out.println(hourtomin + "hours" + secondspass + "seconds");
    return secondspass;
}

1 Ответ

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

Наиболее логичная вещь, которую нужно вернуть, это строка продолжительности из метода getDurationString. Поэтому я бы изменил тип возвращаемого значения на String (как намекал MadProgrammer). Кроме того, поскольку метод не указывает на то, что он собирается что-то напечатать, стиль сказал бы, что обработчик должен обрабатывать вывод. Наконец, чтобы ответить на другой вопрос, IDE с радостью позволит вам вернуть int (секундный проход) из метода с типом возвращаемого значения int, даже если это не то, что вам нужно, или если вычисление неверно.

I немного подправил вычисления и проверку, чтобы сначала преобразовать секунды в минуты (если из-за секунд у минут больше часа - я делаю это, потому что я хотел разрешить секунды> 59), затем разбить минуты на часы и секунды (плюс оригинальные секунды). Далее следует код (я также пытался перебирать переменные падежа; обратите внимание, что поскольку переданные переменные являются примитивными типами, я могу смело изменять их без побочных эффектов для вызывающей стороны).

public class TimeString {

public static String getDurationString(int minutes, int seconds) {
    //since this method is called get, having a side-effect like printing something is undesirable
    if (minutes < 0 || seconds < 0) { //enhanced to handle seconds > 59
        return "Invalid value";
    }
    //handle any seconds that could be minutes
    minutes += seconds / 60;
    seconds %= 60;
    int hours = (minutes / 60);
    minutes %= 60;
    seconds = (seconds + 60 * minutes);
    return hours + " hours " + seconds + " seconds"; //note spaces so things look nice, you asked for hours and seconds, hours, minutes, and seconds is more usual
}

public static void main(String args[]) {
    System.out.println(getDurationString(105, 900));
}
}

ДОПОЛНИТЕЛЬНАЯ МЫСЛЬ: использование часы, секунды и минуты не для длительности кажутся очень нетрадиционными. Вот как выглядит код, если хранить минуты в минутах, а не преобразовывать их в секунды.

public class TimeString {

public static String getDurationString(int minutes, int seconds) {
    //since this method is called get, having a side-effect like printing something is undesirable
    if (minutes < 0 || seconds < 0) { //enhanced to handle seconds > 59
        return "Invalid value";
    }
    //handle any seconds that could be minutes
    minutes += seconds / 60;
    seconds %= 60; //and mod by 60 to get any remaining seconds
    int hours = (minutes / 60);//handle whether there are full hours from the minutes
    minutes %= 60;// and mod by 60 to get the remaining minutes
    //removed line converting minutes back to seconds
    return hours + " hours " + minutes + " minutes " + seconds + " seconds"; //note spaces so things look nice, you asked for hours and seconds, hours, minutes, and seconds is more usual
}

public static void main(String args[]) {
    System.out.println(getDurationString(95, 79));// should become 1 hours 36 minutes 19 seconds
}
}
...