C# “简单错误”;并非所有代码路径都返回一个值";,及;使用未分配的局部变量;

C# “简单错误”;并非所有代码路径都返回一个值";,及;使用未分配的局部变量;,c#,arrays,methods,C#,Arrays,Methods,我有一个我正在写的程序,在学生进入信用等级和学分后,计算每门课程的GPA和质量分数 我有一个问题的部分是计算每门课程的质量分数。我将信用等级和学分转储到两个不同的数组中,并创建了第三个名为QualityPts的数组,该数组将用于存储每个类的总质量分数 这将通过使用索引位置来计算,以确定将在其他2个数组中使用的两个值。现在我用另一种方法做这个,我得到一个错误,说 “并非所有代码路径都返回值” 第二个错误与我的新变量“QualityPts”有关,它仅存在于这个新方法中。上面写着“使用未分配的局部变量

我有一个我正在写的程序,在学生进入信用等级和学分后,计算每门课程的GPA和质量分数

我有一个问题的部分是计算每门课程的质量分数。我将信用等级和学分转储到两个不同的数组中,并创建了第三个名为QualityPts的数组,该数组将用于存储每个类的总质量分数

这将通过使用索引位置来计算,以确定将在其他2个数组中使用的两个值。现在我用另一种方法做这个,我得到一个错误,说

“并非所有代码路径都返回值”

第二个错误与我的新变量“QualityPts”有关,它仅存在于这个新方法中。上面写着“使用未分配的局部变量”

这两个错误都在方法
CalcQP()
中。 我的代码如下:

private decimal[] grades;
private decimal[] Credits;

    private decimal CalcQP()
    {
        decimal[] QualityPts;
        string msg="The total quality Points for this course is: ";

        for (int i = 0; i < grades.Length; i++)
        {

            QualityPts[i] = grades[i] * Credits[i];
            lbQuality.Items.Add(msg + QualityPts[i]);

        }           

    }
private decimal[]等级;
私人十进位[]学分;
私有十进制CalcQP()
{
十进制[]限定符;
string msg=“本课程的总质量分数为:”;
对于(int i=0;i
看起来像
CalcQP()
返回类型应为空。该方法的目的是否只是将项目添加到
lbQuality
?我不确定它还应该从代码段返回什么

实际上,编译器正在停止,因为它可以看到该方法应该返回一个double,但不包含return语句

第二个错误是为您保存一个运行时错误,因为编译器可以看到您正在尝试使用一个尚未初始化的变量。因此,您只需初始化
QualityPts

decimal[] QualityPts = new decimal[grades.Length];

private decimal calcQP()
方法应返回一个十进制值或将
decimal
更改为
void

另外,
QualityPts
应该初始化:
decimal[]QualityPts=新的十进制[grades.Length]

并非所有代码路径都返回值

您已声明您的方法需要返回类型为decimal

private decimal CalcQP()
但你永远不会返回小数点

您需要返回一个(
returnqualitypts[i]

返回数组

private decimal[] CalcQP()
   ... return QualityPts;
还是什么都不退

private void CalcQP()
未赋值局部变量的使用

您正在尝试使用
QualityPts
,但尚未声明,因此
[i]
将没有任何值(或尚未存在)


您正在声明
QualityPts
,但没有初始化它。这就是为什么它给出了错误。遵循标准实践,即声明变量时始终初始化变量。按如下方式操作:

decimal QualityPts = new decimal[length]; // Replace length with your length.
第二件事
CalcQP()
methods返回类型是decimal,而您不返回任何内容。必须从中返回十进制值。要么使该方法无效。按如下方式操作:

 public void CalcQP()

如果您有其他问题,请告诉我。

您的
CalcQP
返回类型是
decimal
,但您根本不返回任何内容。并初始化
QualityPts
数组,如
decimal[]QualityPts=new decimal[grades.Length]我删除了许多与您的问题无关的信息,您应该尝试将问题缩小到只需要必要的代码Hanks伙计,我不知道为什么我必须初始化它,我不必为我的其他数组键入此内容。是的,它正在用另外两个数组的乘积创建一个新数组。听起来像是在另一种情况下为您初始化了数组。如果您只声明一个变量,它将被分配一个空引用。所以,当你说
QualityPts[i]
时,没有什么可参考的,所以你可以看到为什么它会在运行时抛出异常?我建议大家阅读一下.Net中的内存分配,以便更好地了解正在发生的事情。@segaric,在我将它从deciaml改为void之后,它就工作了。谢谢你的帮助。
 public void CalcQP()