2017-09-15 75 views
0

可变数目近日了解到PARAMS和方法来作什么用途,我创造了这样一条:如何提示用户输入值

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

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

    return Total; 
} 

我可以把它就好像

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); 

但是,如果我想通过它未知量的用户输入?

事情是这样的:

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

的问题是,这种方式我必须写Convert.ToInt32(Console.ReadLine());一堆倍。

有没有更好的方法来做到这一点?就像用户输入3个数字一样,它会将它们总结起来,但如果用户下次输入5个数字,则会将该数字加起来,而不是....等。

+0

不知道如果我的理解你在这里问什么。你的add函数需要一个int数组,所以你应该很好地传递任何数量的参数。如果你想最小化转换的数量,你需要将参数传递给你的add函数,你可以让你的add函数接受一个字符串数组,并在你的add函数的for循环中解析为int。 –

+0

你想让用户输入类似'12 5 24 17'的东西,然后生成总数?这与您目前正在获得的答案不同。 – LarsTech

回答

1

听起来像你想要做的是让用户在程序运行时输入数字,当用户“完成”时停止。你将不得不有某种退出条件。用户输入“=”或者告诉程序用户输入的号码被添加。

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

谢谢!这与我的想法类似! –

1

params int[]数组参数将采取任一系列int参数,否则单阵列int(这是analagously的parmas object[]真,等等,等等)。所以,你可以通过你的add(params int[] args)方法的任何大小的整数数组:

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

add(a); 

在实际应用中,这是你将怎样使用,对于你的情况。您可以将任意数量的整数的添加到List<int>,然后将其转换为一个数组:

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()); 

但在这里就是我想总结整数的那个列表,而不是:

var sum = ints.Sum();