试图在文件的每一行中获得最大的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();

试图在文件的每一行中获得最大的int值,并对结果求和

目标字符串可能无法存储在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())
                )
            );
    }