Возвращаемые значения
Напишите метод с именем twice, который принимает int с именем n и отдаёт назад удвоенное число. Заголовок начинается с int, не с void: static int twice(int n). Внутри фигурных скобок напишите return n * 2;. В Main напечатайте результат вызова: Console.WriteLine(twice(7));. Экран должен показать одну строку: 14. Сам twice не вызывает WriteLine. Он только отдаёт 14 назад. Main пишет это число. Эта отдача назад — то, чему учит эта страница. Оставьте публичный класс с именем Pine.
Отдайте число назад в Main
На странице параметров greet и show писали внутри тела метода. Вызов посылал значение внутрь, и метод писал на экран. Здесь метод по-прежнему принимает значение, но ещё и посылает значение наружу. Слово return помечает это исходящее значение. Main может сохранить его или напечатать.
Откройте файл Pine. Имя класса остаётся Pine. Эта страница не переименовывает тип. Удалите любой демо greet, который только пишет hi lena внутри метода, если такая форма — всё, что ещё держит Main. Удалите любой остаток ring();. Удалите любую строку ReadLine. В файле, который вы оставляете, нет ожидания ввода.
Снаружи Main, всё ещё внутри фигурных скобок класса, заголовок говорит int, потому что возвращаемое значение — int. Между скобками int n всё ещё параметр — та же идея, что на прошлой странице. Тело держит одно утверждение: return n * 2;. Оно умножает n на 2 и отдаёт произведение тому, кто вызвал twice. На этой странице внутри twice нет Console.WriteLine. Сохраните файл перед запуском. Полная первая программа — в следующем блоке.
Файл, который вы оставляете
Это полная маленькая программа. twice считает. Main пишет.
using System;
public class Pine
{
public static void Main()
{
Console.WriteLine(twice(7));
}
static int twice(int n)
{
return n * 2;
}
}
Читайте сверху. using System; готовит короткие имена. public class Pine именует тип. public static void Main() — место, где среда запуска начинает работу. Вызов twice(7) посылает 7 в n. static int twice(int n) держит return n * 2;. Console.WriteLine пишет значение, которое вернулось. Одна строка на экране: 14.
Запустите через dotnet run. Программа пишет одну строку и останавливается. Она не ждёт, пока вы наберёте текст. Если dotnet run ждёт, в файле ещё есть ReadLine. Удалите эту строку и оставьте Console.WriteLine(twice(7)); плюс метод twice выше. Экран показывает 14. Если экран показывает hi lena, старый вызов greet всё ещё выполняется. Если экран показывает буквы twice, строка записи взяла это слово в кавычки: Console.WriteLine("twice");. Вы не переустанавливаете .NET SDK из‑за экрана с неверной строкой.
Пройдите один полный запуск по порядку. C# начинает с Main. Вызов twice(7) посылает 7 в n. Внутри twice return n * 2; считает 14 и отдаёт этот 14 назад в Main. Затем WriteLine пишет 14. Сам twice никогда не писал на экран. Если сменить вызов на twice(3), экран должен показать 6. Тело метода остаётся тем же; меняется только аргумент, и возвращаемое произведение меняется вместе с ним. Если экран показывает 7 вместо 14, вы написали n внутри twice или напечатали аргумент в Main без вызова twice — поставьте удвоение на строку return и пишите результат вызова.
Важное разделение — кто говорит с экраном. На этой странице twice говорит только с Main через return. Main говорит с экраном через WriteLine. Поэтому заголовок больше не может говорить void: что‑то должно вернуться, чтобы Main мог написать. Когда вы сначала сохраняете результат в result, вы всё ещё используете ту же отдачу назад; вы только откладываете запись на одну строку.
Напишите значение, которое получил Main
Вы также можете сохранить возвращённое значение в имени внутри Main перед записью. Меняйте только число в вызове, если хотите другую строку на экране. return n * 2; не трогайте.
using System;
public class Pine
{
public static void Main()
{
int result = twice(7);
Console.WriteLine(result);
}
static int twice(int n)
{
return n * 2;
}
}
Это второй файл. Он учит тому же return с сохранённым именем. Запустите dotnet run. По-прежнему одна строка: 14. Сначала вызов заканчивается и заполняет result. Затем WriteLine пишет result. Обе формы — прямая печать вызова или сохранение и затем печать — используют один и тот же return из twice. twice(0) должен написать 0. twice(10) должен написать 20. Каждый раз Main пишет то, что отдал twice. После того как вы увидели сохранённую форму, верните однострочный вызов, если именно его хотите оставить: Console.WriteLine(twice(7)); в Main.
Если twice всё ещё говорит void в заголовке, а в теле есть return n * 2;, сборка пишет ошибку — void значит, что ничего не возвращается, поэтому return со значением не подходит. Если заголовок говорит int, а в теле нет return, сборка тоже пишет ошибку — метод int на этой начальной форме должен отдать int назад. Если тело пишет и никогда не возвращает, вы снова на идее страницы параметров; эта страница хочет число в руках у Main.
void против типизированного return
Прочитайте две формы рядом. Метод void выполняет тело и заканчивается. Метод с типизированным return должен отдать значение через return. Main трактует вызов как это значение, когда тип возврата не void.
📊 void body versus return
| Shape | What the method does | What Main often does |
|---|---|---|
void show(int n) |
writes inside the body | calls show(9); and may write nothing else |
int twice(int n) |
return n * 2; |
writes or stores twice(7) |
Частая путаница — поставить Console.WriteLine(n * 2); внутрь twice и оставить заголовок int без return. Тогда сборка жалуется, или вы меняете заголовок обратно на void и у вас больше нет значения, которое Main мог бы напечатать из вызова. Другая путаница — написать return; без значения, пока заголовок говорит int. Держите return n * 2;, чтобы тип возвращаемого выражения совпадал с int. Запись Console.WriteLine("twice"); в Main пишет слово twice; она не вызывает метод. Держите Console.WriteLine(twice(7)), когда хотите 14 на экране.
Оставшийся демо greet, который только пишет hi lena внутри метода, может сидеть в том же файле и путать экран. Очистите Main до WriteLine, который использует twice, и оставьте один метод, который возвращает. Не вкладывайте twice внутрь фигурных скобок Main. Методы сидят внутри класса, рядом с Main.
Вы можете написать static int twice(int n), вернуть вычисленное значение и напечатать это значение из Main. Экран показывает число, которое получил Main, а не строку, которую метод написал сам. void — неверный заголовок, когда нужно значение назад. Следующая страница — overloading, где больше одного метода могут делить одно имя, когда списки параметров различаются.
Экран держит то, что получил Main
Файл, который вы оставляете, пишет 14, когда Main пишет twice(7). Слово return стоит в теле метода, и return не появляется на экране как напечатанная метка. Кавычки вокруг twice пишут буквы, не результат вызова. Вложение twice внутрь Main — не та форма, которую строит этот урок.
🧠 Проверьте Свои Знания
Проверьте Свои Знания
Бросьте себе вызов с помощью этой интерактивной викторины и узнайте, насколько хорошо вы понимаете тему
📝 Инструкции
- Внимательно прочитайте каждый вопрос
- Выберите лучший ответ на каждый вопрос
- Вы можете пересдавать тест столько раз, сколько захотите
- Ваш прогресс будет показан вверху