静态方法中的 For 循环不需要 {}
本文关键字:不需要 循环 For 静态方法 | 更新日期: 2023-09-27 18:30:13
using System;
class FirstArray
{
static void Main()
{
int numOfGrades;
double[] listOfGrades;
Console.Write("How many students in the class? ");
numOfGrades = int.Parse(Console.ReadLine());
listOfGrades = new double[numOfGrades];
ReadGrades(listOfGrades);
double sumGrades = GetGradesSum(listOfGrades);
Console.WriteLine("'n'nClass statistics'n--------------------");
Console.WriteLine("Grades sum = {0:F2}", sumGrades);
}
static void ReadGrades(double[] grades)
{
for(int i = 0; i < grades.Length; i++)
{
Console.Write("Enter the grade of student {0}:", i + 1);
grades[i] = double.Parse(Console.ReadLine());
}
}
static double GetGradesSum(double[] grades)
{
double sum = 0;
for(int i = 0; i < grades.Length; i++)
sum += grades[i];
return sum;
}
}
大家好,
为什么 GetGradeSum 方法中的 for 循环不需要 {}?当我把大括号放进去时,会出现"检测到无法访问的代码"和"并非所有代码路径都返回值"的编译时错误。 它与返回函数有关吗?
提前感谢!
为什么 GetGradeSum 方法中的 for 循环不需要 {}?
因为它的正文是一个单一的语句。如果正确缩进代码,则更容易理解。您当前的代码更清楚地写成:
static double GetGradesSum(double[] grades)
{
double sum = 0;
for(int i = 0; i < grades.Length; i++)
sum += grades[i];
return sum;
}
请注意 return
语句如何不是循环的一部分。如果是,它将返回一年级,而不是总和。
因此,带大括号的等效代码是:
static double GetGradesSum(double[] grades)
{
double sum = 0;
for(int i = 0; i < grades.Length; i++)
{
sum += grades[i];
}
return sum;
}
听起来您试图在这两个语句周围加上大括号,因此:
// Broken
static double GetGradesSum(double[] grades)
{
double sum = 0;
for(int i = 0; i < grades.Length; i++)
{
sum += grades[i];
return sum;
}
}
在这一点上,编译器抱怨,因为完全有可能在不返回任何内容的情况下到达方法的末尾 - 如果grades
的长度为 0,我们将永远不会进入循环的主体,所以永远不要返回。
请注意,LINQ 无论如何都使所有这些变得无关紧要,请注意 - 您可以编写:
using System.Linq;
...
double sumGrades = listOfGrades.Sum();
如果你不写大括号{}
,那么在循环中只执行for (...)
后面的行。
基本上:
for (...)
A();
B();
相当于:
for (...)
{
A();
}
B();
这也回答了你的第二个问题,因为return
语句将在循环内(假设你把}
放在它后面(。
如果循环体仅包含一个语句,则可以省略大括号。 但如果你这样做:
for(int i = 0; i < grades.Length; i++)
{
sum += grades[i];
return sum;
}
在这种情况下,不能保证 for 循环会运行(例如i < grages.Length
可能不是真的(,所以你得到错误。相反,您应该将 return 语句移到循环之外。
当只有一个语句要执行时,不需要大括号。
此代码:
for(int i = 0; i < grades.Length; i++)
sum += grades[i];
等效于此代码:
for(int i = 0; i < grades.Length; i++)
{
sum += grades[i]
}
如果要执行多个语句,则需要大括号。
附带说明一下,使用大括号总是比不使用大括号更清楚。
有一个不带括号的 for 循环意味着你将只在下一个语句上应用"循环">
所以
for(int i = 0; i < grades.Length; i++)
sum += grades[i];
相当于
for(int i = 0; i < grades.Length; i++)
{
sum += grades[i];
}
方法中的缩进有点令人困惑,因为它会导致您认为 return
语句是循环的一部分。
放置多个语句时,循环中代码两边的大括号才是必需的。如果没有大括号,则只有 for
子句后面的语句是循环的一部分。
如果为循环添加大括号,它们应该只在循环后的语句周围:
static double GetGradesSum(double[] grades)
{
double sum = 0;
for(int i = 0; i < grades.Length; i++)
{
sum += grades[i];
}
return sum;
}
如果改为在循环中包含 return
语句,则只有在执行循环中的代码时才会执行该语句,因此您会收到一个编译器错误,告诉您保证执行 return
语句。
很简单,这里所有的答案都是准确的。在大多数平行 C 的语言中,如果您的目标是单个语句,则不需要大括号。
这意味着启动 for 循环后的下一行是 for 循环中包含的唯一语句。
如果在 return 语句两边加上大括号,则在将 return 语句作为 for 循环的一部分包含在内时,将收到编译错误。
同样,如果您希望作为编程美学,则可以在单个目标语句周围包含大括号,但除非您要包含在循环中多个语句,否则这不是必需的。
这个原则与 if/else 语句相同。