为什么文本文件的信息没有读入我的数组,然后读入列表框
本文关键字:数组 然后 列表 我的 文本 信息 为什么 文件 | 更新日期: 2023-09-27 17:56:46
我对C#比较陌生,遇到了一个问题。我的程序每次尝试捕获时都会不断抛出错误。我已经检查了所有内容并改变了一些东西,但似乎没有任何效果。可能是文本文件的读取吗?还是阵列?还是转移到列表框中?我真的需要一些帮助。它已经变得只不过是一个令人头疼的问题。 ............................................................................................................................................................................................................................................................................................................................................................................................................................................................................
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace Total_Sales_BBrantley
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnCalc_Click(object sender, EventArgs e)
{
try
{
// Declare variable to hold the amount of sales
// Declare variable to act as the accumulator
const int SIZE = 100;
double[] allSales = new double[SIZE];
double total = 0.0;
double average;
double highest = allSales[0];
double lowest = allSales[2000];
int count = 0;
// Declare a StreamReader variable.
StreamReader readFile;
// Open the file and get a StreamReader object using a relative path
readFile = File.OpenText("Sales.txt");
while (!readFile.EndOfStream && count < allSales.Length)
{
allSales[count] = int.Parse(readFile.ReadLine());
// Increment count
count++;
}
// Close the file
readFile.Close();
lstSales.Items.Add("The file contains " + count + " items:");
for (int index = 0; index < count; index++)
{
lstSales.Items.Add(allSales[index]);
}
// Display the total
double sum = allSales.Sum();
lblTotal.Text = sum.ToString();
total += sum;
average = total / allSales.Length;
lblAverage.Text = average.ToString();
for (int index = 1; index < allSales.Length; index++)
{
if (allSales[index] > highest)
{
highest = allSales[index];
}
lblHighest.Text = highest.ToString();
}
for (int index = 1; index < allSales.Length; index++)
{
if (allSales[index] < lowest)
{
lowest = allSales[index];
}
lblLowest.Text = lowest.ToString();
}
}
catch (Exception)
{
// Display an error message on bad input from file
MessageBox.Show("Error calculating the sales.");
}
}
private void btnExit_Click(object sender, EventArgs e)
{
//Closes the application
this.Close();
}
}
}
阅读您的所有代码,但是开始时有一个错误:
const int SIZE = 100;
double[] allSales = new double[SIZE];
<snip>
double lowest = allSales[2000];
您已将数组声明为具有 100 个元素,但您正在尝试访问第 2,000 个元素。 你的数组不是那么大,所以你会在该行得到一个 IndexOutOfRangeException。
数组在声明后在 C# 中具有固定大小。 如果需要更改大小,请使用泛型 List 类。
在martin_costello的答案上,也许你可以像这样初始化最低和最高:
double highest = double.MinValue;
double lowest = double.MaxValue;
或者至少,在加载数据后初始化这些值!
另外,还有一个调试提示:如果收到错误,请显示 catch 返回的错误或注释掉 try/catch,以便可以看到错误。
前者的例子:
catch (Exception ex)
{
// Display an error message on bad input from file
MessageBox.Show(string.Concat("Error calculating the sales: ", ex.Message, "'r'n", ex.StackTrace));
}