public static int min(int a, int b, int c, int d) {
int y = min(a,b);
int x = min(c,d);
return min(min(a, b), min(c, d));
}
public static int min(int a, int b) {
int m2;
if (a < b)
m2 = a;
else
m2 = b;
return m2;
//напишите тут ваш код
Объясните, пожалуйста, как это работает по строчно?!
Каким образом первый метод для переменной х понимает, что надо применить действия из второго метода min как в переменной y?
И как первый метод понимает, что m2 это min(a,b)?
хотя все работает даже без переменных!!!!
как работает эта магия с min(c,d)?
и как программа сравнивает min(a,b) и min(c,d)?
Maksimt58
26 уровень
Объясните, пожалуйста, как это работает по строчно?!
Решен
Комментарии (17)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Михаил
27 марта 2019, 22:25
public static int min(int a, int b, int c, int d) { // Объявляем метод min с 4мя переменными
int y = min(a,b); /* Записываем в переменную "у" возвращаемое значение из метода min с 2мя переменными, передаваемые переменные a и b */
// По сути не нужно, далее не используется
int x = min(c,d); /* Записываем в переменную "x" возвращаемое значение из метода min с 2мя переменными, передаваемые переменные a и b */
// По сути не нужно, далее не используется
return min(min(a, b), min(c, d)); /* возвращаем из метода min с 4мя значениями (метод объявленный вначале)
для понимания :
return min(x, у) и return min(min(a, b), min(c, d)); одно и тоже если подставить "y" и "x" из равенств выше */
}
public static int min(int a, int b) { // Объявляем метод min с 2мя переменными
int m2; // создаем пустую переменную
if (a < b) // сравниваем переданные значения, дословно - если "a" меньше "b" то см. ниже
m2 = a; // присваиваем созданной переменной значение "а"
else // дословно - в ином случае см. ниже
m2 = b; // присваиваем созданной переменной значение "b"
return m2; // возвращаем из метода значение созданной переменной (не саму переменную)
+2
Maksimt58
28 марта 2019, 07:58
Михаил, спасибо большое! Почему-то ваш комментарий не сразу отобразился в ветке.
0
Игорь Давиденко
27 марта 2019, 18:21
Да, очень элегантное решение. Я делал более дубовым способом.
Попробую ответить
min(a,b); - находиться минимальное число в паре a b - допустим это a
( с помощью вот этого кода
public static int min(int a, int b) { int m2; if (a < b) m2 = a; else m2 = b; return m2;)
тоже самое для пары min(c,d); - находиться минимальное число в паре с в - допустим это d
min(min(a, b), min(c, d)); далее находиться минимальное число среди значений a и d
Вот где то так я вижу.
0
RiccioMaster
27 марта 2019, 18:28
Старайтесь оформлять код соответствующими тэгами. Иначе его тяжело читать.
Элегантным это решение было бы без лишних переменных и с отформатированным кодом:
0
Maksimt58
27 марта 2019, 18:28
Игорь, солидарен с Вами! Изначально решил тоже дубовым методом, этот метод вывел собрав лучшие коменты в обсуждении.
И все таки остается не понятным, каким образом ко второй паре min(c, d) применяется тот же алгоритм, что и к первой?
0
Maksimt58
27 марта 2019, 18:32
Корректное замечание! спасибо! сейчас сам понимаю, что эти две строки были ни к чему, но продолжаю не понимать, как работает эта программа, ее алгоритм выполнения!
Могли бы описать более детально?
0
Paltusov
28 марта 2019, 05:44
Добрый день,
все очень просто. Алгоритм выполнения метода
min(min(a, b), min(c, d)); для примера со значениями: min(min(5, 2), min(3, 4));
следующий:
1. Выполняется min(5, 2) = 2;
2. Выполняется min(3, 4) = 3;
3. Выполняется min(результат выполнения п.1 = 2, результат выполнения п.2 = 3);
в итоге min(2, 3) = 2. Ответ: 2.
По идее надо было метод написать так, что проще для того кто будет читать код после автора:
public static int min(int a, int b, int c, int d) {
int y = min(a,b);
int x = min(c,d);
return min(x, y);
}
0
Maksimt58
28 марта 2019, 07:19
По факту получается, что в этом задании второй метод где а и b, не очень то и нужен, точнее нужен только для усложнения задания?
0
--------Master
28 марта 2019, 07:24
По факту получается, что метод поиска минимума из двух значений существенно упрощает и сокращает процесс поиска минимума из 4 значений: тебе уже наглядно показали, как с помощью этого метода можно решить задачу в одну строчку, в чем тут "усложнение"? В том, что не надо тупо перебирать наугад все имеющиеся значения, а можно легко и просто использовать уже имеющиеся инструменты?
0
Maksimt58
28 марта 2019, 07:27
Если ты внимательно ознакомишься с условием задачи, то поймешь, что в задаче нужно использовать два метода! Поэтому я и спрашиваю какой смысл от второго метода, если все вычисления можно произвести в одном методе?!
0
--------Master
28 марта 2019, 07:31
Ок, покажи нам, недалеким, как ты эти вычисления произведешь в одном методе с неким "упрощением" кода, без использования "ненужной" замены кучи дублирующихся блоков. Понашлепаешь миллион одинаковых сравнений a и b, c и d вместо вызовов min(a, b) в одну строчку?
0
Maksimt58
28 марта 2019, 07:43
Я не понимаю как это работает, поэтому сюда и написал, чтобы понять! Вот и задаю вопросы и прошу показать как производятся эти вычисления!
Я пытаюсь понять, что если min(a,b) вычисляется засчет второго метода, то каким образом работает вычисление min(c,d)? Оно же не само по себе считается...
0
--------Master
28 марта 2019, 07:49
переменные int a, int b будут существовать только внутри этого метода, как они называются за его пределами - методу совершенно не важно.
0
Maksimt58
28 марта 2019, 07:52
Теперь все встает на свои места!
Спасибо большое!
Также получается, что в этой строчке return min(min(a, b), min(c, d));
min(a, b) = a;
min(c, d) = b;
Верно?
0
--------Master
28 марта 2019, 07:54
Да, верно. Для этого методы и нужны в принципе - заменять повторяющиеся блоки кода универсальными вызовами: и код сокращается, и риск ошибиться меньше, и читается лучше, и т.д.
0
Maksimt58
28 марта 2019, 08:00
Egorro, спасибо большое за помощь!
Очень понятно все разъяснил! :)
+1
Paltusov
28 марта 2019, 09:19
Все верно.
0