黑马程序员技术交流社区

标题: 关于标记bool flag=false; [打印本页]

作者: 张久朝    时间: 2013-6-15 22:02
标题: 关于标记bool flag=false;
本帖最后由 张久朝 于 2013-6-15 22:53 编辑

关于标记bool  flag=false;对于这个一直有点迷,哪位大神能通俗易懂的讲解一下?
比如说:
定义一个bool类型  如bool  flag=false;
应用如下
bool flag=false;
             do
             {
                 flag = false;//当 flag = false时进行如下循环
             Console.WriteLine("请输入用户名");
             string name = Console.ReadLine();
             Console.WriteLine("请输入密码");
             string score = Console.ReadLine();
            
             if (name != "admin" || score != "888888")
            
            
             {
                 Console.WriteLine("密码或用户名输入错误,请重新输入");
                 flag = true;//如果等于true则跳出循环
             }
            
             }
             while(flag);      
             Console.WriteLine("登录成功");
             Console.ReadKey();
可以理解为while后的flag如果和bool定义的flag相同时就循环
为true时也就是和bool定义的相反时就不循环了直接跳出循环输出结果吗???????

作者: 陈行    时间: 2013-6-15 22:14
理解错了  while(flag)的flag为true就循环  为false就不循环
作者: 张久朝    时间: 2013-6-15 22:15
淡.。 发表于 2013-6-15 22:14
理解错了  while(flag)的flag为true就循环  为false就不循环

是我搞反了么
作者: 高腾    时间: 2013-6-15 22:18
这里定义的flag标识,初始值为false
当用户名和密码输入错误的时候,会提示重新输入,并且flag标识重新赋值为true
这个时候会进入while的条件判断
flag为true,那么就继续进行循环
一直到用户名和密码输入正确,不进入到if的代码块,flag为false(每次循环都会初始化,因为你的flag=false是放在循环快中),则退出循环,输出登陆成功
作者: 彭家贰小姐    时间: 2013-6-15 22:41
首先先理解两个概念
(1)bool flag=false; 这句是定义了一个变量为flag 在下面代码中出现的flag都是这个变量
(2)do while 的特点是先执行循环体,再判断条件,条件满足,再继续执行循环体

看下这个方法的执行步骤:
(1)第一次执行循环体 变量flag为false


当输入的name="mavis"     score = "123456"
符合(name != "admin" || score != "888888")
所以走入 Console.WriteLine("密码或用户名输入错误,请重新输入");
             flag = true;


(2)判断条件
    因为flag 此时 为true
    所以条件符合,会再走一次循环体
(3)当我们输入正确时

则不符合(name != "admin" || score != "888888") flag 仍然为 false
所以while中的判断条件 不符合 所以就不用走循环体了
此时输入任意键就可以退出了......

作者: 陈壹    时间: 2013-6-15 22:44
bool flag = false;
            do
            {
                flag = false;    // 给flag赋值为false,注意这不是判断循环的条件
                Console.WriteLine("请输入用户名");
                string name = Console.ReadLine();
                Console.WriteLine("请输入密码");
                string score = Console.ReadLine();

                if (name != "admin" || score != "888888")
                {
                    Console.WriteLine("密码或用户名输入错误,请重新输入");
                    flag = true;  //给flag赋值为true
                }

            }
            while (flag); //你是将flag的值作为循环判断的条件,从代码上看当flag为false时跳出循环
            Console.WriteLine("登录成功");
从这段代码可以看出,你对while的循环条件理解有点问题,while()中条件的输出为bool类型,当条件成立时,返回true,继续循环,当条件不成立时返回false,跳出循环
如果你想让flag=true时跳出循环,while的条件应该修改为
while(flag!=true),  于此相对的是在do中第一句
flag=false  相对多余
作者: 张久朝    时间: 2013-6-15 22:54
谢谢大家的帮助撒
作者: 张久朝    时间: 2013-6-15 22:56
彭家贰小姐 发表于 2013-6-15 22:41
首先先理解两个概念
(1)bool flag=false; 这句是定义了一个变量为flag 在下面代码中出现的flag都是这个变量 ...

很八错找找视频又看了下总算多少了解了
作者: 张久朝    时间: 2013-6-15 22:58
陈壹 发表于 2013-6-15 22:44
bool flag = false;
            do
            {

非常感谢解释的很清楚
作者: aa26963    时间: 2013-6-17 07:00
如果flag 被设为true了,说明是你用户名或密码错了,所有需要重新输入,所以继续执行while循环。
若果flag 还是false 说明,没有进入if里,那就是用户名和密码都对了,所以跳出循环。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2