面向零基础新手的 C# 基础知识 11

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();
}
}
}

点赞

发表回复

电子邮件地址不会被公开。必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据