C#学习笔记 05.01

C#学习笔记 05.01

(学习视频来自bilibili的传智播客赵老师基础教学视频)

整完了while循环,就来for循环

个人感觉对于确定循环次数的这个用的更多一点,至少不用担心因为失误把循环写死,而while循环则被用于故意写死的循环。
for (int i = 0; i < length(这是需要判断的条件); i++(这里完成条件变动))
{
这里面是循环体
}
这个和while的差别,就是不需要总是记得把条件的变化写进循环体里面,就不容易忘。。。
因为本身都是循环,所以说功能上来讲用哪个都能实现,只是用哪个更方便。

还是来个例子

输出水仙花数(个位,十位,百位的立方和等于这个数本身的数)

            Console.WriteLine("水仙花数:");
            int baiWei, shiWei, geWei, sum;
            for (int i = 100; i < 1000; i++)
            {
                baiWei = (int)i / 100; //这个强转其实不是很有必要
                shiWei = ((int)i / 10) - baiWei * 10;
                geWei = i % 10;
                sum = (int)( Math.Pow(baiWei, 3) + Math.Pow(shiWei, 3) + Math.Pow(geWei, 3));
                if (sum==i)
                {
                    Console.Write(i + "\t");
                }
            }
            Console.ReadKey();

乘法口诀表

            for (int i = 1; i < 10; i++)
            {
                for (int j = i; j < 10; j++)
                {
                    Console.Write("{0}x{1}={2}\t", i, j, i * j);
                }
                Console.WriteLine();
            }
            for (int i = 1; i < 10; i++)
            {
                for (int j = 1; j < i + 1; j++)
                {
                    Console.Write("{0}x{1}={2}\t", j, i, i * j);
                }
                Console.WriteLine();
            }
            Console.ReadKey();

break 只能跳出当前循环,不能跳出所有循环

Continue 立即停止本次循环回到循环条件进行判断,如果条件成立那么继续,不成立则跳出

上例子

while 配合continue 输出100以内所有能被7整除的数之和。
            int i = 0;
            int sum = 0;
            while (i < 100)
            {
                i = i + 1;
                if (i % 7 == 0)
                {
                    continue;
                }
                sum = sum + i;
            }
            Console.WriteLine(sum);
            Console.ReadKey();

另一种变量类型转换的方法

int.Parse()
Convert.ToInt32()
这两个东西其实是一样的,其实内部而言,Convert.ToInt32() 调用的就是 int.Parse()

故事终于走向了我没碰过东东

三元表达式

表达式1 ?表达式2:表达式3;

如果表达式1 的结果是 true ,那么返回表达式2 ,否则 返回表达式3
其实就是 if else 针对一些赋值情况的一种简便写法。

创建随机数

Random r = new Random();
r.Next(1,10);
产生一个1~10的随机数,推测这是个开区间,但是如果我们把他赋值给int,他会进行小数抹除,所以表现出来的就是 1 到 10 的左闭右开区间(说人话就是包括 1 不包括 10)。
随机数这个东西有个神奇的特性是时间种子,所以不要在循环里面创建(当然,本来也不应该在循环里面创建对象),因为这个特性的存在,如果我们在循环中创建(实例化)这个对象,会造成随机数不再随机。

关键字 const

加了这个关键字之后会变成常量,只能被赋值一次,后面不能重新赋值。

枚举类型

枚举和我们的各种变量其实是一样的,只不过是对内容进行了一些限定
目的是用来规范开发中对于某些通用性东西的表达。
枚举类型不能写在函数(方法里面)最好直接写在命名空间,这样在同一个命名空间(项目)可以很方便的访问。

类型转换

枚举类型和 int 类型兼容,可以直接强制转换,默认是从 0 开始;
如果我们强行让其中某个与数字进行对应,那么会保持后面的以 1 递增。
举个例子
enum 汉字与数字
{一,二,三,五,六}
这样对应的数字时 0 1 2 3 4
enum 汉字与数字
{一 = 1,二,三,五 = 5,六}
这样一来就对应了 1 2 3 5 6

转成字符串也比较简单
所有的类型基本都有一个角 tostring 的方法,可以直接转成字符串
汉字与数字.一.ToString(); 这样就会得到一个字符串 “一”

比较麻烦的是把字符串转换成枚举类型

插一句,.Parse()这个方法好多类型都能 . 出来,就是把其他类型转化成当前的类型,比如前面的 int.Parse()就是把括号里的(一般是字符串)转成 int 类型。
Enum.Parse()就是用来将其他类型转换成枚举类型的,但是当原本的枚举中并不存在,这种转换就会抛出异常。

枚举类型赋值有个简便方法,就是写完赋值符号(=)之后敲一个空格,会自动的出来,选一下然后把想赋的值 . 出来就行了

说了半天也不太好整明白,还是写个代码吧。

写五个QQ的状态,在线,离线,忙碌,隐身,请勿打扰

先演示第一个出现的错误

    public enum QQ状态
    {
        在线=1,
        离线=3,
        忙碌=0,
        隐身,//这样按顺序下来,隐身也是1
        请勿打扰
    }

按照自动给我们的枚举对应数字的方式,在线,隐身这两个东西有了相同的索引,所以试着运行这个:
Console.WriteLine(QQ状态.在线.ToString() + QQ状态.隐身.ToString());
就会得到这个:在这里插入图片描述

这显然是不可取的,所以一旦我们手动给各个部分定义了数值,那就需要保证其唯一性,不然后面的会盖掉前面的。
然后我们接着这个来,第二个会出现问题的地方

    class Program
    {
        static void Main(string[] args)
        {
            QQ状态 zt0 = (QQ状态)9;//数字强转成枚举,如果数字在枚举中没有对应值,也会转换成功
            Console.Write(zt0.ToString());//比如这样,就会输出9,也就是在枚举里面补了一个,补进去这个值和索引都是9
            int zt1 = (int)QQ状态.在线;  //枚举和 int 互转

            QQ状态 zt2 = (QQ状态)Enum.Parse(typeof(QQ状态), "2");//如果我们这个字符串是数字的话,那么就和上面的一样
            QQ状态 zt3 = (QQ状态)Enum.Parse(typeof(QQ状态), "忙碌");//如果字符串真的是字符串,如果枚举中存在,那就转换成功
            QQ状态 zt4 = (QQ状态)Enum.Parse(typeof(QQ状态), "我也不知道是啥状态");
            //如果枚举中不存在,就会抛出异常(猜测是程序不能像int那样很直接的直接分配索引,索性就不给处理了)
            Console.ReadKey();
        }
    }
    public enum QQ状态
    {
        在线 = 1,
        离线,
        忙碌,
        隐身,
        请勿打扰
    }
让我们完整的实现一个功能

让用户输入1~5五个数字,显示出不同的状态,如果输入别的就报错重输

using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;

namespace _08_MeiJu
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("请确定在线状态:1-在线,2-离线,3-忙碌,4-隐身,5-请勿打扰");
            lable_shuru:
            string input_str = Console.ReadLine();

            if (!(input_str=="1"|| input_str == "2"|| input_str == "3"|| input_str == "4"|| input_str == "5"))
            {
                Console.WriteLine("请输入1~5数字");
                goto lable_shuru;
            }
            QQ状态 zt = (QQ状态)Enum.Parse(typeof(QQ状态), input_str);
            Console.WriteLine(zt.ToString());
            Console.ReadKey();
        }
    }
    public enum QQ状态
    {
        在线 = 1,
        离线,
        忙碌,
        隐身,
        请勿打扰
    }
}

这波学的有点多啊。。结构类型

结构类型,作用是一次性声明多个不同类型的变量
语法:
public struct 结构名 { public 字段类型 字段名}
这里比较需要注意的是这个叫法,因为我们在这个结构类型里面将变量加了 public 修饰符,就不再被称为变量了,而称为字段,字段命名规则是在前面加一个下划线
其实我们常用的 int 就是一个结构

举个例子:

    public struct XinXi //一个结构型变量
    {
        public string _name;
        public int _age;
        public Gender _gender;
    }
    public enum Gender //一个枚举类型
    {,}
    class Program
    {
        static void Main(string[] args)
        {
            XinXi zhangSan,xiaoLan;
            zhangSan._name = "张三";
            zhangSan._age = 18;
            zhangSan._gender = Gender.;
            xiaoLan._name = "小兰";
            xiaoLan._age = 20;
            xiaoLan._gender = Gender.;
        }
    }

最后一个 数组

结构是一个变量里面存好多其他类型的变量,就像前面的,我们在一个类型为 xinxi 的变量里面又存了 string int gender(是个枚举)这三个类型的变量。
数组呢,则是在一个变量中存好多个相同类型的变量。
语法 int [] nums =new int[10]
在数组中我们可以用索引去访问其中的每一个内容,值得注意的是,数组的这个索引和枚举的默认索引是一样的,都是从0开始的。

数组声明的方式

前面的 int [] nums =new int[10] 是一种,只确定长度,不赋值;
另外 int [] = { 1,2,3,4,5 } 声明时候就直接赋值;
这两种是最常用的;
还有两种麻烦的。。就不管了。。

值得注意的是数组一旦声明,长度就定下来了,不能更改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值