2017-09-15 4 views
0

récemment appris sur params et ce qu'il faut l'utiliser dans les méthodes, j'ai créé celui-ci:Comment demander à l'utilisateur un nombre variable de valeurs

public int add(params int[] args) 
{ 
    int Total = 0; 

    for (int i = 0; i < args.Length; i++) 
    { 
     Total += args[i]; 
    } 

    return Total; 
} 

je peux l'appeler très bien comme

int Add = n.add(2,34,4,5,6); 
int Add2 = n.add(1, 2, 3, 4, 5, 6); 

Console.WriteLine(Add); 
Console.WriteLine(Add2); 

Mais que faire si je veux lui transmettre une quantité inconnue d'entrée de l'utilisateur?

Quelque chose comme ceci:

Console.WriteLine(n.add(Convert.ToInt32(Console.ReadLine()),Convert.ToInt32(Console.ReadLine()))); 

Le problème est que cette façon, je dois écrire Convert.ToInt32(Console.ReadLine()); un tas de fois.

Y a-t-il une meilleure façon de le faire? Comme si l'utilisateur tape 3 nombres, il les additionne, mais si l'utilisateur tape 5 fois le nombre suivant, il le résumera à la place .... etc, etc.

+0

sûr si je comprends ce que vous demandez ici. Votre fonction d'addition prend un tableau de int, donc vous devriez passer très bien dans n'importe quel nombre de paramètres. Si vous voulez minimiser la quantité de convertis, vous devez passer les paramètres à votre fonction add, vous pouvez faire en sorte que votre fonction add accepte un tableau de chaînes et analyser en int à l'intérieur de votre boucle for dans votre fonction add. –

+0

Voulez-vous que l'utilisateur entre quelque chose comme '12 5 24 17' et produise le total? C'est un scénario différent des réponses que vous obtenez actuellement. – LarsTech

Répondre

1

Cela ressemble à ce que vous voulez faire laisser l'utilisateur entrer les chiffres pendant que le programme s'exécute, et arrêter quand l'utilisateur est "fini". Vous devriez avoir une sorte de condition de sortie. Soit l'utilisateur entre "=" soit quelque chose qui indique au programme que l'utilisateur a fini d'entrer les numéros à ajouter.

int Sum=0; 
string s="0"; 
while (!s.Equals("=")) { 
    Sum += Convert.ToInt16(s); 
    Console.Write("Type a number (Enter = to get the sum): "); 
    s = Console.ReadLine(); 
} 
Console.WriteLine("The sum is " + Sum.ToString()); 
+0

Merci! C'est semblable à ce que j'avais en tête! –

1

Un argument de tableau params int[] prendra soit une série de int arguments, ou bien un seul tableau de int (ce qui est vrai de parmas object[] de manière analogue, etc., etc.). Ainsi, vous pouvez passer votre méthode add(params int[] args) un tableau de ints de toute taille:

var a = new [] { 1, 2, 3 }; 

add(a); 

En pratique, cela est comment vous utiliser pour votre cas. Vous pouvez ajouter un nombre quelconque de ints à un List<int>, puis le convertir en un tableau:

List<int> ints = new List<int>(); 

while (true) { 
    var s = Console.ReadLine(s); 

    int n; 
    if (Int32.TryParse(s, out n)) { 
     ints.Add(n); 
    } else { 
     break; 
    } 
} 

int sum = add(ints.ToArray()); 

Mais voici comment je résumerai que la liste des ints au lieu: Non

var sum = ints.Sum();