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