11
这18分钟我觉得学的时间比前面的30多分钟还要长。
这次的代码量是前面这么多课以来最多的一次。甚至比UWP 19那次还长。
这次主要分三大部分讲:
11.1 主体框架
上一节课学过过程、函数后,在这里就派上大用处了。
本次程序的主要部分都在过程以及函数上。
用伪代码解释一下,大概就是这样:
程序开始;
选择选项;
分支一:数数游戏;(结束后返回主菜单)
分支二:猜数字;(结束后返回主菜单)
分支三:退出;
可以看见,在两个分支选择后,我们都需要返回主菜单,这时候,我的木鱼脑袋里立刻就想到:
“那在,数数结束后再调用主菜单不就行了?”
可是,我们学的是While啊。
于是,智慧的Bob也有他的好方法。
static void Main(string[] args)
{
bool ifdisplay = true;
while (ifdisplay)
{
ifdisplay=choice();
}
}private static bool choice()
{
Console.Clear();
Console.WriteLine("那么,辩护律师,你认为,这件证物的意义是……");
Console.WriteLine("1.没有意义");
Console.WriteLine("2.裁判长的头发");
Console.WriteLine("3.狩魔检察官的鞭子");
string result = Console.ReadLine();
if (result == "1")
{
return false;
}
else if (result == "2")
{
toufa();
return true;
}
else if (result == "3")
{
bianzi();
return true;
}
else
{
return true;
}
}
解释:Bob的方法主要意思是在程序主体写一个While语句,以及创建一个布尔变量用以判断是否返回主菜单。并且,他把主菜单(choice)改造成了一个函数用来返回值。比我的好多了。
11.2 数数
这个其实是最为常见的While用法了。存在一个计数器,用来数数(其实也可以用For写吧)。我把Bob的程序稍微的改了一下。Bob的程序输出到最后会多一个“-”我的应该没有这个问题。
private static void toufa()
{
Console.Clear();
Console.WriteLine("那么,辩护人,请说出裁判长头发的数目!");
int res = int.Parse(Console.ReadLine());
int jishuqi = 1;
while (jishuqi < res)
{
Console.Write(jishuqi + " - ");
jishuqi++;
}
Console.Write(jishuqi);
Console.ReadLine();
}
解释:这个应该比较简单吧。就是读取数字,然后再输出。有一个新类型的语句要记忆,相当于VB中的VAL()一样,int.Parse是用来把字符串转换为数字类型的。
11.3 小冥的皮鞭啪啪大冒险 猜数字游戏
这里有了while的第三种用法,像这样:
do
{
}
while();
与while不同的是,这个语句是先执行,后判断条件。也就是说,不会出现没判断就退出的情况。可是,这里似乎没有用到的必要啊??
我也把Bob的改进了一下。
private static void bianzi()
{
Console.Clear();
Console.WriteLine("那么,成步堂 龙一!你就说你要被我的鞭子抽几下吧!");
Random hit = new Random();
int after = hit.Next(1, 11);
int cishu = 0;
bool cuowu = true;
while (cuowu)
{
int what = int.Parse(Console.ReadLine());
if (after < what )
{
cishu++;
Console.WriteLine("白痴的成步堂第{0}次猜出比正确答案大的白痴的错误答案",cishu );
}
else if (after > what)
{
cishu++;
Console.WriteLine("白痴的成步堂第{0}次猜出比正确答案小的白痴的错误答案", cishu);
}
else
{
cuowu = false;
Console.WriteLine("白痴的成步堂用他的白痴脑子猜了{0}次才猜到白痴的正确答案",cishu );
}
}
Console.ReadLine();
}
▲你看,这里cuowu变量无论如何都肯定等于true啊,为什么要有那个呢?
这里又有一个新知识要我们学了!怎么生成随机数呢?
Random hit = new Random();
int after = hit.Next(1, 11);
▲注意!不同着色的是变量名
Bob说了,你就照葫芦画瓢就行了,这是个类,详细的以后解释。但是,第二行还是可以理解的。随机数hit的方法Next有三种重构形式(上节课刚学的!),我们这里取的是第三种:生成随机整数,左闭右开。用数学写就是这样:
[a,b) (a,b∈Z*)
或者:
a≤随机数<b
就是这样。
下面是完整代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace While循环
{
class Program
{
static void Main(string[] args)
{
bool ifdisplay = true;
while (ifdisplay)
{
ifdisplay=choice();
}}
private static bool choice()
{
Console.Clear();
Console.WriteLine("那么,辩护律师,你认为,这件证物的意义是……");
Console.WriteLine("1.没有意义");
Console.WriteLine("2.裁判长的头发");
Console.WriteLine("3.狩魔检察官的鞭子");
string result = Console.ReadLine();
if (result == "1")
{
return false;
}
else if (result == "2")
{
toufa();
return true;
}
else if (result == "3")
{
bianzi();
return true;
}
else
{
return true;
}
}
private static void toufa()
{
Console.Clear();
Console.WriteLine("那么,辩护人,请说出裁判长头发的数目!");
int res = int.Parse(Console.ReadLine());
int jishuqi = 1;
while (jishuqi < res)
{
Console.Write(jishuqi + " - ");
jishuqi++;
}
Console.Write(jishuqi);
Console.ReadLine();
}
private static void bianzi()
{
Console.Clear();
Console.WriteLine("那么,成步堂 龙一!你就说你要被我的鞭子抽几下吧!");
Random hit = new Random();
int after = hit.Next(1, 11);
int cishu = 0;
bool cuowu = true;
while (cuowu)
{
int what = int.Parse(Console.ReadLine());
if (after < what )
{
cishu++;
Console.WriteLine("白痴的成步堂第{0}次猜出比正确答案大的白痴的错误答案",cishu );
}
else if (after > what)
{
cishu++;
Console.WriteLine("白痴的成步堂第{0}次猜出比正确答案小的白痴的错误答案", cishu);
}
else
{
cuowu = false;
Console.WriteLine("白痴的成步堂用他的白痴脑子猜了{0}次才猜到白痴的正确答案",cishu );
}
}
Console.ReadLine();
}
}
}