这是一个稍微修改过的答案,我在前面提到的问题。当发生奇怪的事情时,我会改变它以更好地理解它。
对于C#中的循环应该以这种方式工作:
for (initial increment value, end increment value, increment rate)
{
// for loop body
}
我得到的答案代码似乎有效,但是在内部循环中没有括号。这是代码:
using System;
class Prime_Screening
{
static void Main()
{
Console.WriteLine("Prime numbers x, where: 0 < x < 100");
bool prime;
for (int num = 2; num <= 100; num++)
{
prime = true; /
for (int div = 2; div <= Math.Sqrt(num); div++)
// Why isn't the contents of this for loop in braces? Attempting it produces a weird output
if(num % div == 0)
prime = false;
if (prime)
Console.Write(num.ToString() + ", ");
}
}
}
我在for循环中添加了大括号,以便我可以保持代码清晰,但是我得到了一些奇怪的重复输出:
5,7,9,11,11,13,13,15,17,17,17,19,19,19,21,23,23,23,25,25,25,27,29,29 ,29,29,31 ... 93,95,95,95,97,97,97,97,97,97,97,97,99,
为什么呢?虽然我们关注这个问题,但是,如果陈述也是括号吗?
编辑:拼写/语法
答案 0 :(得分:4)
您不需要使用大括号,但只有第一个语句属于循环。
由于此处不是if-else
而是if
只有第一个属于循环:
for (int div = 2; div <= Math.Sqrt(num); div++)
if (num % div == 0)
prime = false;
if (prime)
Console.Write(num.ToString() + ", ");
与以下内容相同:
for (int div = 2; div <= Math.Sqrt(num); div++)
{
if (num % div == 0)
prime = false;
}
if (prime)
Console.Write(num.ToString() + ", ");
而不是这两个属于循环的代码:
for (int div = 2; div <= Math.Sqrt(num); div++)
{
if (num % div == 0)
prime = false;
if (prime)
Console.Write(num.ToString() + ", ");
}
来自msdn:for-loop
循环体包含一个语句,一个空语句或一个 通过封闭零或更多来创建的语句块 大括号中的陈述。
答案 1 :(得分:3)
你得到奇怪结果的原因是因为未支持的陈述仅适用于下一个陈述。
这是没有大括号编译的内容:
for (int div = 2; div <= Math.Sqrt(num); div++)
{
// Why isn't the contents of this for loop in braces? Attempting it produces a weird output
if(num % div == 0)
prime = false;
}
if (prime)
Console.Write(num.ToString() + ", ");
答案 2 :(得分:3)
for
循环不需要跟一个语句块(用大括号包裹一些语句),它只需要后跟一个语句。语句块只是将一些语句转换为单个(复杂)语句的一种方式。
内部for
循环后面的语句是:
if(num % div == 0)
prime = false;
如果你用括号包裹它,它不会改变代码。如果你在括号中包含了那个和下面的语句(第二个if
块)(如你的缩进似乎表明的那样),那么你将改变代码的语义。
同样的行为也适用于if
,while
,foreach
,do
等结构,尽管interestingly enough not try/catch/finally blocks
答案 3 :(得分:0)
当我们有多个语句放入代码块时,我们使用大括号。它可以是for loop
while loop
if else
等。
但是当我们只有一个语句时,我们不使用大括号。当我们不使用大括号时,会在循环中考虑下一个语句。
在您的情况下,您必须将两个if
条件放在大括号中,否则它将只考虑循环中的第一个if
条件。