Я новичок в программировании на 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
Комментариев нет:
Отправить комментарий