首页 新闻 会员 周边 捐助

关于两个for循环的疑问

0
悬赏园豆:60 [已解决问题] 解决于 2009-11-02 20:25

小弟刚刚学习编程,当有以下for循环程序段的时候程序如何执行:

A、for(int i=0;i<10;i++)                                            B、   for(int i=0;i<10;i++)

{                                                                                          for(int j=0;j<10;j++)

  for(int j=0;j<10;j++)

}

在上面的B段循环中执行顺序是不是这样:先i=0,然后j从0循环到9,在i=1,然后j从0循环到9;

A段程序和B段程序执行顺序有什么区别?

福荣的主页 福荣 | 初学一级 | 园豆:0
提问于:2009-10-28 21:41
< >
分享
最佳答案
0

第一楼回答时我不知道你有没测试过!你的答案是对的,但是你的说法有问题,我完全可以负责人的说这里不会抛出你说的异常,同样程序也会按照提问者那样子的想法执行的,下面说下个人理解:

这里需要明白一个概念,

代码块作用域---一个代码块是包含在开始花括号和对应的结束花括号之内的一段代码。这也就是说我们常常写程序时使用的{}称为一个代码块作用域,那这个作用域有啥作用呢?同时和提问者B类写法有什么区别和相同点呢?那现在我写下面几段代码大家可以看下

代码段一:

for (int i = 0; i < 10; i++)
                for (int j = 0; j < 10; j++){
                    Response.Write(string.Format("i={0},j={1}&nbsp", i, j));

代码段二:

for (int i = 0; i < 10; i++)
                for (int j = 0; j < 10; j++)

                    Response.Write(string.Format("i={0},j={1}&nbsp", i, j));
                Response.Write("</br>"+j.ToString());

代码段三:

for (int i = 0; i < 10; i++)
                for (int j = 0; j < 10; j++)
                {
                    Response.Write(string.Format("i={0},j={1}&nbsp", i, j));
                    Response.Write("</br>" + j.ToString());
                }

其实类似的代码段还有好多,这三种基本可以代表,故不在写其他的类型。看了上面三段代码,我想知道作用域和代码块作用域的同志们应该看完后就能说出一二三来。

哪么下面我说下这三段代码,代码段一是没问题的,肯定能打印出结果来,代码段三也一样可以执行,哪么断码段二呢?他能执行吗?我可以肯定的告诉你不可以。

在C#中如果我们这样子int i=0写程序的话,编译器会报错提示应输入";",对,就是我们程序中的分号。说到此想必明白了吧!这里就是告诉编译器int声明的变量i并赋值为0,至此这个声明和赋值结束了;说到此肯定有人会说我说的不对,因为存在int i=0,j=1;类似这样子的生命和赋值语句,对没错,确实这样,那这样子的又如何解?我想这里开个小玩笑来理解吧,中文中大家都知道逗号是啥意思吧,表示一句话还没说完对吧,那同样;也一样哦,他表示是对逗号语句的一个分隔哦!O(∩_∩)O~  这么理解就对了!其实编译器也一样,在int i=0,j=1;这里可以理解为int声明变量的作用域扩大了,原来int声明一个变量就以;结束了,现在声明了两个变量才以;结束,那到这里了我想大家明白了吧!

即时我们前面写多少个for循环,如果我们不用{}来限定for程序执行的作用域的话,哪么C#编译器会以类似int i=0,int j=0;这样子的方式来判断for循环的作用域的,其实也就是以第一个;为程序作用域的结束标识的。也就是在写for的时候如果我们不写{}来定义for的作用域的话,哪么编译器会依据for后面的第一个;作为当前for的作用域的!在这里可以说是缩小了for的作用域,把代码块的作用域缩小为语句式的作用域了。

 

说的有些乱...如果能理解就好

收获园豆:40
西越泽 | 专家六级 |园豆:10775 | 2009-10-29 10:58
其他回答(6)
0
for (int i = 0; i < 10; i++)
for (int j = 0; j < 10; j++)

 


首先,这样写肯定会抛错的

1. Error 1 Invalid expression term '}' 

2. Error 2 ; expected 

代码如下:

            for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
Console.Write(
"[{0},{1}]", i, j);
}
}

for (int i = 0; i < 10; i++)
for (int j = 0; j < 10; j++)
{
Console.Write(
"[{0},{1}]", i, j);
}

执行结果为:

A:
[0,0][0,1][0,2][0,3][0,4][0,5][0,6][0,7][0,8][0,9][1,0][1,1][1,2][1,3][1,4][1,5][1,6][1,7][1,8][1,9][2,0][2,1][2,2][2,3][2,4][2,5][2,6][2,7][2,8][2,9][3,0][3,1][3,2][3,3][3,4][3,5][3,6][3,7][3,8][3,9][4,0][4,1][4,2][4,3][4,4][4,5][4,6][4,7][4,8][4,9][5,0][5,1][5,2][5,3][5,4][5,5][5,6][5,7][5,8][5,9][6,0][6,1][6,2][6,3][6,4][6,5][6,6][6,7][6,8][6,9][7,0][7,1][7,2][7,3][7,4][7,5][7,6][7,7][7,8][7,9][8,0][8,1][8,2][8,3][8,4][8,5][8,6][8,7][8,8][8,9][9,0][9,1][9,2][9,3][9,4][9,5][9,6][9,7][9,8][9,9]

B:
[0,0][0,1][0,2][0,3][0,4][0,5][0,6][0,7][0,8][0,9][1,0][1,1][1,2][1,3][1,4][1,5][1,6][1,7][1,8][1,9][2,0][2,1][2,2][2,3][2,4][2,5][2,6][2,7][2,8][2,9][3,0][3,1][3,2][3,3][3,4][3,5][3,6][3,7][3,8][3,9][4,0][4,1][4,2][4,3][4,4][4,5][4,6][4,7][4,8][4,9][5,0][5,1][5,2][5,3][5,4][5,5][5,6][5,7][5,8][5,9][6,0][6,1][6,2][6,3][6,4][6,5][6,6][6,7][6,8][6,9][7,0][7,1][7,2][7,3][7,4][7,5][7,6][7,7][7,8][7,9][8,0][8,1][8,2][8,3][8,4][8,5][8,6][8,7][8,8][8,9][9,0][9,1][9,2][9,3][9,4][9,5][9,6][9,7][9,8][9,9]

 

结论:

没什么不同

laaaaaa | 园豆:241 (菜鸟二级) | 2009-10-28 22:01
0

你理解正确

Mr雨 | 园豆:1199 (小虾三级) | 2009-10-29 09:49
0

for (int i = 0; i < 10; i++)
  
for (int j = 0; j < 10; j++)
  {
     Console.Write(
"[{0},{1}]", i, j);
  }

都是一样的.像if的下面代码一样,不过感觉加上大括号,可以帮助别人读程序

if()

    执行A

收获园豆:10
风浪 | 园豆:2996 (老鸟四级) | 2009-10-29 09:59
0

A和B是一样的,不过是写法不一样而已,A是标准的写法,也容易阅读。B的写法不一定标准,有的编译器可能会报错,但不是所有都会报错。

收获园豆:10
天堂口 | 园豆:514 (小虾三级) | 2009-10-29 11:55
0

呵呵这个没有必要争吗, 机子上试试就知道了,计算机是最实在的了,嘿嘿

苏飞 | 园豆:2024 (老鸟四级) | 2009-10-29 18:08
0

哎.干嘛老拿不标准的代码折磨自己,不用它不就完了? 每个For都加个大括号(即使只有一条语句),既保证没错,又方便阅读.这不是很好吗?

DaCHun | 园豆:255 (菜鸟二级) | 2009-10-30 11:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册