Страницы

Поиск по вопросам

суббота, 23 марта 2019 г.

Метод в C#, меняющий местами значения переменных

Я новичок в программировании на C#, попался вопрос про обмен значениями переменных без использования третьей. С одним из решений все понятно:
int a = 2; int b = 4; a = a + b; b = a - b; a = a - b;
У меня другой вопрос, можно ли это как-то засунуть в метод? Написал так:
class Program { public static void Main(string[] args) {
Console.WriteLine("Введите значения переменных a и b"); Console.Write("a = ");
int x = int.Parse(Console.ReadLine());
Console.Write("b = ");
int y = int.Parse(Console.ReadLine());
SwapNumbers(x, y); Console.Write($"Переменная a = {x}, переменная b = {y} "); Console.ReadLine();
}
public static void SwapNumbers(int a, int b) { a = a + b; b = a - b; a = a - b; } }
Но переменные x и y не меняются местами, по крайне мере в методе Main. Можно сделать так:
public static void SwapNumbers(int a, int b) { a = a + b; b = a - b; a = a - b; Console.Write($"Переменная a = {a}, переменная b = {b} "); }
Но это выглядит как-то коряво и неуместно, потому что я хочу, чтобы метод только менял местами введенные с клавиатуры значения, а где и когда их вывести я хочу решать сам.


Ответ

Всё дело в том, что ты передаешь копии переменных в метод Swap. Чтобы иметь возможность передавать ссылку есть ключевое слово ref
Т.е. метод будет выглядеть так:
public static void Main(string[] args) { int a = 7, b = 5; Console.WriteLine("a -> {0}; b -> {1}", a, b); Swap(ref a, ref b); Console.WriteLine("a -> {0}; b -> {1}", a, b); }
public static void Swap(ref int a, ref int b) { a = a + b; b = a - b; a = a - b; }
Есть также параметр out. Разница между ref и out тут: ref и out

Комментариев нет:

Отправить комментарий