La fonction de permutation de 2 éléments dans un tableau ne fonctionne pas
Je suis nouveau avec C# et je ne comprends pas pourquoi ce code ne fonctionne pas.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
char[] sw = "ab".ToCharArray();
swap(sw[0], sw[1]);
string end = new string(sw);
Console.Write(end);
}
static void swap(char a, char b)
{
char temp = a;
a = b;
b = temp;
}
}
}
Ce que j'attends de la console est "ba", mais j'obtiens un "ab". J'ai été en mesure de trouver autre approche pour résoudre ce problème, mais ce que je voudrais savoir c'est quelle est l'erreur dans ce code.
Merci pour l'aide!
Vous devez vous connecter pour publier un commentaire.
Le problème est que le
swap
méthode est en fait que manipuler des copies locales dea
etb
. Vous devez passer les arguments par référence. Si vous définissez laswap
méthode comme ceci:Et de l'appeler comme ceci:
Swap
générique de sorte qu'il fonctionne pour tout les tableaux, puis le mettre dans certains utilitaires de la classe.Il devrait être modifié comme suit (Note: dans cet exemple,
ref char[] arr
est préfixé avecref
principalement pour but didactique: tableau sera passé parref
par défaut)Votre swap est de prendre deux types de valeur et d'échange des valeurs entre les variables. Il n'y a rien qui permettrait de modifier le tableau d'origine. Vous devez modifier votre méthode d'échange de quelque chose comme:
Vous pouvez ensuite appeler à partir Main() comme:
Plus générique de la matrice de fonction de permutation:
Aussi, une fonction générique de swap de plusieurs éléments d'un tableau:
Vous passez vos arguments
a
etb
en valeur.Voir Quelle est la différence entre le passage par référence vs passage par valeur? pour plus d'informations.
Voici deux solutions pour résoudre votre problème.
Voici une question sur si vous devez utiliser ou essayer d'éviter le mot-clé ref. En dehors de la plus simple utilise, il est souvent conseillé d'éviter réf lorsque cela est possible. Swap tombe dans la catégorie des "plus simple utilise," mais je suggère que vous essayez d'éviter d'utiliser ref dans la plupart des situations pratiques.
Quand est-ce en utilisant le C# mot-clé ref jamais une bonne idée?