从 C# 中用 space 分隔的用户读取整数数组
Read array of integers from user which is separated by space in C#
我被要求用 C# 解决一个问题,以在一行中从控制台获取 'n' 用户输入的总和,由 space 分隔。
int n = Convert.ToInt32(Console.ReadLine());
int[] arr = new int[n];
int sum = 0;
for(int i = 0; i < n; i++) {
arr[i] = Convert.ToInt32(Console.ReadLine());
sum += arr[i];
}
Console.WriteLine("{0}",sum);
如何修改此代码以从 space 分隔的输入中获得预期的输出?
此外,这些值需要存储在数组中。
输入:
5
1 2 3 4 5
输出:
15
你可以这样做:
int result = input.Split(' ').Take(n).Select(int.Parse).Sum();
但在我看来,您可以避免向用户询问计数,只需将他们输入的所有行加在一起即可:
string input = Console.ReadLine();
int result = input.Split(' ').Select(int.Parse).Sum();
Console.WriteLine(result);
(请注意,此代码不进行错误检查。)
编辑:您似乎想要一个整数数组。在那种情况下,您可以这样做(同样,没有错误检查):
using System;
using System.Linq;
namespace Demo
{
internal class Program
{
private static void Main()
{
int n = int.Parse(Console.ReadLine());
int[] arr = Console.ReadLine().Split(' ').Take(n).Select(int.Parse).ToArray();
int sum = arr.Sum();
Console.WriteLine("{0}", sum);
}
}
}
int result = Console.ReadLine().Split().Select(int.Parse).Sum();
您当然必须根据需要处理任何错误的用户输入。
根据您添加的要求:
int[] items = Console.ReadLine().Split().Select(int.Parse).ToArray();
int sum = items.Sum();
您需要使用C#中的split函数。当您阅读该行时,您将获得整行。这意味着您试图说 "sum = 0 plus Convert.ToInt32('5 1 2 3 4 5')" 是行不通的。
您需要一个整数数组,等于
Console.ReadLine().Split(" ");
String.Split函数:
https://msdn.microsoft.com/en-us/library/b873y76a.aspx
在循环内使用 arr[i] = Convert.ToInt32(Console.ReadLine()) 将导致程序期望在不同的行而不是在一行上输入。
您可以做的是将输入作为字符串,然后根据 space 进行拆分,这会生成一个输入值数组。然后你可以对它们求和
考虑到Naveen好像是个学生,我觉得多写点代码可以更好的解释,让他从这个练习中学到更多东西:
我制作了一个样本,它获取一些由 space 或回车分隔的数字,当用户输入 T 时,使用循环和 Linq 以传统方式计算总和。我相信有很多更好的方法可以做到这一点,但也许更结构化的东西可以更好地开始理解 C#。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SumTheNumbers
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Insert the numbers separated by a space or [Enter]> key, when finished write T and press [Enter] and you will have the result");
List<int> values = new List<int>();
while (true)
{
string inputData = Console.ReadLine();
if (inputData.ToUpper().StartsWith("T")) break;
string[] svals = inputData.Split(' ');
for (int i = 0; i < svals.Length; i++)
{
int x = 0;
int.TryParse(svals[i], out x);
if (x != 0) values.Add(x);
}
}
//Traditional mode
int total = 0;
for (int i = 0; i < values.Count; i++)
{
total = total + values[i];
}
//Linq mode
int totalLinq = values.Sum();
Console.WriteLine("The sum is");
Console.Write("Total: ");
Console.WriteLine(total.ToString());
Console.Write("Total linq: ");
Console.WriteLine(totalLinq.ToString());
Console.WriteLine("Press a key to end...");
Console.ReadKey();
}
}
}
我被要求用 C# 解决一个问题,以在一行中从控制台获取 'n' 用户输入的总和,由 space 分隔。
int n = Convert.ToInt32(Console.ReadLine());
int[] arr = new int[n];
int sum = 0;
for(int i = 0; i < n; i++) {
arr[i] = Convert.ToInt32(Console.ReadLine());
sum += arr[i];
}
Console.WriteLine("{0}",sum);
如何修改此代码以从 space 分隔的输入中获得预期的输出? 此外,这些值需要存储在数组中。
输入:
5
1 2 3 4 5
输出:
15
你可以这样做:
int result = input.Split(' ').Take(n).Select(int.Parse).Sum();
但在我看来,您可以避免向用户询问计数,只需将他们输入的所有行加在一起即可:
string input = Console.ReadLine();
int result = input.Split(' ').Select(int.Parse).Sum();
Console.WriteLine(result);
(请注意,此代码不进行错误检查。)
编辑:您似乎想要一个整数数组。在那种情况下,您可以这样做(同样,没有错误检查):
using System;
using System.Linq;
namespace Demo
{
internal class Program
{
private static void Main()
{
int n = int.Parse(Console.ReadLine());
int[] arr = Console.ReadLine().Split(' ').Take(n).Select(int.Parse).ToArray();
int sum = arr.Sum();
Console.WriteLine("{0}", sum);
}
}
}
int result = Console.ReadLine().Split().Select(int.Parse).Sum();
您当然必须根据需要处理任何错误的用户输入。
根据您添加的要求:
int[] items = Console.ReadLine().Split().Select(int.Parse).ToArray();
int sum = items.Sum();
您需要使用C#中的split函数。当您阅读该行时,您将获得整行。这意味着您试图说 "sum = 0 plus Convert.ToInt32('5 1 2 3 4 5')" 是行不通的。
您需要一个整数数组,等于 Console.ReadLine().Split(" ");
String.Split函数: https://msdn.microsoft.com/en-us/library/b873y76a.aspx
在循环内使用 arr[i] = Convert.ToInt32(Console.ReadLine()) 将导致程序期望在不同的行而不是在一行上输入。 您可以做的是将输入作为字符串,然后根据 space 进行拆分,这会生成一个输入值数组。然后你可以对它们求和
考虑到Naveen好像是个学生,我觉得多写点代码可以更好的解释,让他从这个练习中学到更多东西:
我制作了一个样本,它获取一些由 space 或回车分隔的数字,当用户输入 T 时,使用循环和 Linq 以传统方式计算总和。我相信有很多更好的方法可以做到这一点,但也许更结构化的东西可以更好地开始理解 C#。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SumTheNumbers
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Insert the numbers separated by a space or [Enter]> key, when finished write T and press [Enter] and you will have the result");
List<int> values = new List<int>();
while (true)
{
string inputData = Console.ReadLine();
if (inputData.ToUpper().StartsWith("T")) break;
string[] svals = inputData.Split(' ');
for (int i = 0; i < svals.Length; i++)
{
int x = 0;
int.TryParse(svals[i], out x);
if (x != 0) values.Add(x);
}
}
//Traditional mode
int total = 0;
for (int i = 0; i < values.Count; i++)
{
total = total + values[i];
}
//Linq mode
int totalLinq = values.Sum();
Console.WriteLine("The sum is");
Console.Write("Total: ");
Console.WriteLine(total.ToString());
Console.Write("Total linq: ");
Console.WriteLine(totalLinq.ToString());
Console.WriteLine("Press a key to end...");
Console.ReadKey();
}
}
}