试图在文件的每一行中获得最大的int值,并对结果求和
本文关键字:int 求和 结果 文件 一行 | 更新日期: 2023-09-27 18:20:39
当我尝试运行代码时,我会得到错误:
输入字符串的格式不正确。
我试图在文本文件的每一行中找到最大的int,然后将它们全部相加。
我确信这个文件中没有字母,所有的东西都用空格隔开。
这是我的代码:
int counter = 0;
string line;
List<int> col = new List<int>();
// Read the file and display it line by line.
System.IO.StreamReader file =
new System.IO.StreamReader(label3.Text);
while ((line = file.ReadLine()) != null)
{
int[] storage = new int[10000];
Console.WriteLine(line);
counter++;
string s = line;
string[] words = s.Split(' ');
for (int i = 0; i < words.Length; i++)
{
storage[i] = Convert.ToInt32(words[i]);
}
int large = storage.Max();
col.Add(large);
Console.WriteLine(" ");
foreach (int iii in col)
{
Console.WriteLine(iii);
}
int total = col.Sum();
Console.WriteLine(total);
}
file.Close();
// Suspend the screen.
Console.ReadLine();
目标字符串可能无法存储在32位整数中。您可以尝试解析为ulong
类型。看看积分类型表和浮点类型表。
不要执行Convert.ToInt32()
,而是尝试int.TryParse()
。它将返回一个bool值,告诉您操作是否成功,并且它有一个out参数,用于放置解析操作的结果。TryParse操作也可用于其他数字类型,如果您决定需要它们。
例如
int val;
string strVal = "1000";
if (int.TryParse(strVal, out val))
{
// do something with val
}
else
{
// report error or skip
}
我做了一个快速测试,很可能在行中出现错误
storage[i] = Convert.ToInt32(words[i]);
如果是这样,请确保您尝试转换的是一个整数,而不是空字符串。
我相信代码中可能导致此错误的行是
Convert.ToInt32(words[i]);
现在,当您在visualstudio中以调试模式(可能是这样)运行此应用程序时,您可以在发生异常时检查程序中发生了什么。
在屏幕的最底部会有一些选项卡。这些选项卡包括您的错误列表以及其他内容。我喜欢使用的被称为"本地"answers"观看"。您可以使用"本地设置"选项卡。
当您单击Locals选项卡时,您应该会看到程序中所有局部变量的树结构。如果展开words变量,应该可以看到数组的所有单个成员。您还应该能够看到变量i检查单词数组的第i个成员,并确保它是一个整数,而不是其他东西。
您正在转换超出大小,或者试图解析回车'/r'
确保你在调整你的输入。
我的解决方案:
static void Main(string[] args)
{
int linecount = 100;
string path = @"C:'test'test.txt";
Random rand = new Random();
//Create File
StreamWriter writer = new StreamWriter(path, false);
for (int i = 0; i < linecount; i++)
{
for (int j = 0; j < rand.Next(10, 15); j++)
{
writer.Write(rand.Next() + " ");
}
writer.WriteLine("");
}
writer.Close();
//Sum File
long sum = Enumerable.Sum<string>(
(new StreamReader(path)).ReadToEnd().Split(new char[] { ''n' }, StringSplitOptions.RemoveEmptyEntries),
l => Enumerable.Max(
l.Split(' '),
i => String.IsNullOrEmpty(i.Trim()) ? 0 : long.Parse(i.Trim())
)
);
}