重复调用函数时出现C#错误

重复调用函数时出现C#错误,c#,C#,我对以下代码有问题: class Program { public static void Progress(ProgressEventArgs e) { int result = e.getPartialResult; int stack_value = e.getValue ; double max = System.Convert.ToDouble(numbers[j]); System.Convert.To

我对以下代码有问题:

 class Program
{
    public static void Progress(ProgressEventArgs e)
    {
        int result = e.getPartialResult;
        int stack_value = e.getValue ;
        double max = System.Convert.ToDouble(numbers[j]);
        System.Convert.ToDouble(stack_value);
        double percent = (stack_value / max) * 100;

        Console.CursorLeft = 18;
        Console.Write(result + " ");
        Console.CursorLeft = 46;
        Console.Write(System.Convert.ToInt32(percent) + "%      ");

    }
    public static void Calculate(int number, int time=0)
    {

        Factorial Fact = new Factorial();
        Fact.Progression += new Factorial.ProgressEventHandler(Progress);
        Console.Write("\n" + "Partial results : ");
        Console.CursorLeft = 35;
        Console.Write("Progress : ");         
        int Result = Fact.CalculateFactorial(number, time);
        Console.WriteLine(" ");
        Console.WriteLine("The factorial of " + number + " is : " + Result);


        Console.ReadLine();
    }

    static int j;
    static int[] numbers;

    public static void Main(string[] args)
    {
        int i=0;
        bool ok = false;
        numbers = new int[10];
        Console.Write("Please insert wait time (0,1 or 2) : ");
        int time = int.Parse(Console.ReadLine()) * 1000;
        Console.Write("Please insert a number : ");
        do
            if (Console.ReadLine() != "")
            {
                i++;
                numbers[i] = int.Parse(Console.ReadLine());


            }
            else
            {
                ok = true;
            }
        while (ok == false);
        for (j = 1; j <= i; j++)
        {

            Calculate(numbers[j],time);
        }

    }
}
类程序
{
公共静态无效进度(ProgressEventArgs e)
{
int result=e.getPartialResult;
int stack_value=e.getValue;
double max=系统转换为双(数字[j]);
System.Convert.ToDouble(堆栈值);
双百分比=(堆栈_值/最大值)*100;
Console.CursorLeft=18;
Console.Write(结果+“”);
Console.CursorLeft=46;
Console.Write(System.Convert.ToInt32(百分比)+“%”;
}
公共静态无效计算(整数,整数时间=0)
{
阶乘事实=新阶乘();
Fact.Progression+=新的阶乘.ProgressEventHandler(Progress);
控制台。写入(“\n”+”部分结果:”);
Console.CursorLeft=35;
控制台。写入(“进度:”);
int结果=事实。计算系数(数字、时间);
控制台。写线(“”);
Console.WriteLine(“+number+”的阶乘是:“+Result”);
Console.ReadLine();
}
静态int j;
静态int[]数;
公共静态void Main(字符串[]args)
{
int i=0;
bool ok=false;
数字=新整数[10];
控制台。写入(“请插入等待时间(0,1或2):”;
int time=int.Parse(Console.ReadLine())*1000;
控制台。写下(“请插入数字:”);
做
if(Console.ReadLine()!=“”)
{
i++;
numbers[i]=int.Parse(Console.ReadLine());
}
其他的
{
ok=正确;
}
while(ok==false);

对于(j=1;j您正在读取该行两次。更改代码如下:

string line = string.Empty;
do
{
    line = Console.ReadLine();
    if (!string.IsNullOrEmpty(line))
    { 
       numbers[i] = int.Parse(line);
       i++;
    }
    else
    {
      ok = true;
    }

}while (!ok && i<10);
string line=string.Empty;
做
{
line=Console.ReadLine();
如果(!string.IsNullOrEmpty(行))
{ 
数字[i]=int.Parse(行);
i++;
}
其他的
{
ok=正确;
}

}while(!ok&&iwhile循环正在等待中断。 像下面这样的东西就好了

....
string inputString;
while (!string.IsNullOrEmpty(inputString = Console.ReadLine()) && i < numbers.Length)
{
   numbers[i] = int.Parse(inputString);
   i++;
}
。。。。
字符串输入字符串;
而(!string.IsNullOrEmpty(inputString=Console.ReadLine())&&i
对于一个问题来说,这是相当多的代码。如果可能的话,试着将其缩小到显示问题的最小示例。还请包括引发
FormatException
的确切位置。为了使事情更简单,请尝试使用“try{}catch(Exception err){}”这使您能够提供有关错误的更多信息。在“catch”块中,您可以将信息输出到控制台。如下所述=确保数组始终从索引位置0开始,而不是从一开始。数组[0]是正确的起点。虽然正确且漂亮,但在我看来,Tigran的代码更容易理解,可读性更强。特别是对于一个明显的新手来说……是的,他的答案很好。我无法阻止自己重构这个单元。我觉得它对我来说已经足够好了