动态写入列表
本文关键字:列表 动态 | 更新日期: 2023-09-27 17:55:51
所以我正在尝试解决这个问题:
你会得到一个数字 n 和 2*n 个数字。编写要检查的程序 奇数之和是否等于偶数n之和 数字。第一个数字被认为是奇数,下一个是偶数,下一个是偶数 又奇怪了,等等。打印结果为"是"或"否"。如果是,请打印 也是总和。如果否,则还要打印奇数之间的差异 和偶数总和。
输入
应从控制台读取输入数据。
• 第一行包含整数 n – 数字计数。
• 接下来的 2*n 行中的每一行都只包含一个数字。
输入数据将始终有效,并且采用所描述的格式。那里 无需明确检查。
输出
• 输出必须打印在控制台上。
• 打印"是的,sum=S",其中 S 是奇数 n 个数字的总和,以防万一 奇数 n 数之和等于偶数 n 之和 数字。
• 否则打印"否,diff=D",其中 D 是 奇数 n 数和偶数 n 数之和。D 应 始终为正数。约束
• 数字 n 在 [0...500] 范围内是整数。
• 所有其他数字都是 [-500 000 ...500 000]。
• 程序允许的工作时间:0.25 秒。
• 允许内存:16 MB。
我当前的编译代码是这样的:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Odd_and_Even_Sum
{
class Program
{
static void Main(string[] args)
{
int n = int.Parse(Console.ReadLine());
List<string> stringOfNumbers = new List<string>(2*n);
stringOfNumbers.DefaultIfEmpty();
List<int> listOfEvenNumbers = new List<int>(2*n);
List<int> listOfOddNumbers = new List<int>(2*n);
int diff = 0;
for (int i = 0; i < 2*n; i++)
{
stringOfNumbers[i] = Console.ReadLine();
}
List<int> listOfNumber = new List<int>() { 1, 2, 3 };
for (int i = 0; i < 2*n; i++)
{
listOfNumber[i] = int.Parse(stringOfNumbers[i]);
}
foreach (var item in listOfNumber)
{
if (IsEven(item))
{
listOfEvenNumbers.Add(item);
}
else
{
listOfOddNumbers.Add(item);
}
}
int sumOfEven = listOfEvenNumbers.Sum();
int sumOfOdd = listOfOddNumbers.Sum();
if (sumOfEven > sumOfOdd){
diff = sumOfEven - sumOfOdd;
}
if (sumOfEven < sumOfOdd){
diff = sumOfOdd - sumOfEven;
}
if (sumOfEven == sumOfOdd)
{
Console.WriteLine("Yes, sum ={0}", sumOfEven);
}
else
{
Console.WriteLine("No, diff={0}", diff);
}
}
public static bool IsEven(int n)
{
if (n % 2 == 0)
{
return true;
}
else
{
return false;
}
}
}
}
我的代码正在编译,但是当我插入输入值时,我得到这个错误:
未处理的异常:System.ArgumentOutOfRangeException:索引已出 的范围。 必须是非负数且小于 收集。参数名称:索引位于 System.ThrowHelper.ThrowArgumentOutOfRangeException() at System.Collections.Generic.List'1.set_Item(Int32 index, T 值) at Odd_and_Even_Sum.Program.Main(String[] args) in c:''Users''User1''Documents''V isual Studio 2013''Projects''Odd and even 总和''程序.cs:第 21 行
写的时候
List<string> stringOfNumbers = new List<string>(2*n);
您正在创建一个新的空列表,该列表具有零元素,但初始容量限制为 2*n。这意味着它保留内存用于插入 2*n 个元素,但它没有任何内存。
stringOfNumbers[i] = Console.ReadLine();
在这里,您正在尝试访问列表中导致异常的元素,因为列表中没有元素。
stringOfNumbers.Add(Console.ReadLine());
您混淆了添加动态列表元素的方式,并且在此列表的实例中存在错误