C#入门学习——7

常量

const 变量类型 变量名=值;

常量不能被重新赋值


枚举

[public] enum 枚举名                  public:访问修饰符,公开的公共的,哪都能访问

{                                                  enum:声明枚举的关键字                                              

值1,                                            枚举名:符合Pascal命名规范

值2,

值3,

...

}

枚举就是一个变量类型,就像int,string,double,decimal,是用来存储数据的。只是枚举声明,赋值,使用的方式跟那些普通变量类型不一样。

声明一个枚举:要在命名空间下面,类的上面,表示这一个命名空间的所有类都能用这个枚举
                       

 public enum Gender

{

    男,

    女

}

如何使用呢?和声明变量一样——变量类型 变量名 = 值       

Gender gender = Gender.男;

枚举和int或者string类型之间的转换

首先来声明一个枚举:
 

public enum QQState

{

    Online=1,

    Offline,

    Busy,

    QMe

}

将枚举类型转换为int

枚举类型默认跟int类型互相兼容,可以通过强制类型转换互相转换

QQState state = QQState.Busy;
int n = (int)state;

将int转换为枚举

枚举类型默认从0开始,除非赋值。当转换一个枚举中没有的数字的时候,输出的是原数字,不会抛异常。

int n = 3;//如果是8输出的是8
QQState state =(QQState)n;
Console.WriteLine(n);
Console.ReadKey();

现在输出的是Busy

将枚举转换成string

所有类型都可以转换成string类型

QQState state = QQState.Busy;
string s = state.ToString;
Console.WriteLine(s);
Console.ReadKey();

这里直接调用ToString方法转换就行了。

*将string转换成枚举

这个转换就相对复杂一些了,需要输入这样一行代码

枚举名 变量名 = (要转换的类型)Enum.Parse(typeof(要转换的枚举名),"要转换的字符串")

调用Parse()的目的就是为了让它帮助我们将一个字符串转换成对应的枚举类型

typeof用来获取枚举类型

string s = "0";
QQState state = (QQState)Enum.Parse(typeof(QQstare),s);
Console.WriteLine(state);
Console.ReadKey();

如果转换的字符串是数字,就算枚举中没有,也不会抛异常,如果转换的字符串是文本,如果枚举中没有,则抛异常。

枚举练习

//提示用户选择在线状态,接收并将用户输入转换成枚举类型,再打印

Console.WriteLine("选择在线状态 1--Online 2--Offline 3--Busy 4--QMe");
string input = Console.ReadLine();
//用户输入1234,定值比较输出值
switch(input)
{
    case "1":QQState s1 = (QQState)Enum.Parse(typeof(QQState),input);
        Console.WriteLine("您的选择是{0}",s1);
        break;
    case "2":QQState s2 = (QQState)Enum.Parse(typeof(QQState),s2);
        Console.WriteLine("您的选择是{0}",s2);
        break;
    case "3":QQState s3 = (QQState)Enum.Parse(typeof(QQState),s3);
        Console.WriteLine("您的选择是{0}",s3);
        break;
    case "4":QQState s4 = (QQState)Enum.Parse(typeof(QQState),s4);
        Console.WriteLine("您的选择是{0}".s4);
        break;
    default:Console.WriteLine("输入数字有误,退出");
        break;
}
Console.ReadKey();

结构

[public]struct 结构名

{

        成员;//字段                

}

变量在程序运行中只能存储一个数据,字段可以存储多个。

public struct Person
{
    public string _name;
    public int _age;
    public Gender _gender;
}

结构练习

//定义一个结构类型Person,有三个成员,分别为姓名,性别,年龄,性别用枚举类型
//声明两个person类型的变量,分别表示张三和小兰

Person.person1;
person1._name = "zs";
person1._age = 21;
person1.gender = Gender.男;
Person.person2;
person2._name = "xl";
person2._age = 19;
person2._gender = Gender.女;
Console.WriteLine(person1._name);
Console.WriteLine(person2._name);
Console.ReadKey();

数组

数组类型[] 数组名=new 数组类型[数组长度]

数组类型[] 数组名={元素1,元素2,元素3...}

数组类型[] 数组名=new 数组类型[3]{元素1,元素2,元素3}

数组类型[] 数组名=new 数组类型[]{元素1,元素2,元素3...}

后面两种声明方式不常用。

数组的长度一旦固定就不能被改变

当写了上面一行代码之后,就在内存中开辟了连续的n块空间,我们管每一块空间称之为这个数组的元素,如果你想要访问数组的某一块元素,就需要通过这个元素的索引(下标)去访问。

数组的第一个元素下标是,0;最后一个元素下标是,数组长度-1

int[] nunms = new int[10];
for (int i = 0; i<nums.Length; i++)//通过一个for循环给每个元素赋值
{
    nums[i] = i + 1;
}
for(int i =0;i<nums.Length;i++)//再通过一个for循环打印每一个元素
{
    Console.WriteLine(nums[i]);
}
Console.ReadLine();

数组练习

//从一个整数数组中取出最大的整数,最小的整数,总和,平均值

bool b = true; 
int sum = 0;//声明一个变量存储总和
int[] number = {12,14,3,2,11,6,7,13,9,10};
for(int i = 0; i < number.Length; i++)//判断最大值
{
    for(int j = 1; j < number.Length)//把每一个数和后面的数比大小
    {
        if(number[i]>number[j])
        {
            b=true;
        }
        else
        {
            b=false;
            break;//如果前一个数小于后边的数,就跳出,用下一个数继续去比较
        }
    }
    if(b==true)
    {
        Console.WriteLine("最大的证书是{0}",number[i])
        break;
    }
}
for(int i = 0; i < number.Length; i++)//判断最小值
{
    for(int j = 1; j < number.Length)//把每一个数和后面的数比大小
    {
        if(number[i]<=number[j])
        {
            b=true;
        }
        else
        {
            b=false;
            break;//如果前一个数大于后边的数,就跳出,用下一个数继续去比较
        }
    }
    if(b==true)
    {
        Console.WriteLine("最小的证书是{0}",number[i])
        break;
    }
}
for(int i = 0;i<number.Length;i++)
{
    sum+=number[i];
}
Console.WriteLine("总和是{0},平均值是{1}",sum,sum/number.Length);
Console.ReadKey();

//4.将一个整数数组的每一个元素进行如下处理,如果元素是正数,则将这个位置的元素的值+1
//如果是负数,则将这个位置的元素的值-1,如果元素是0,则不变
//for+if else-if

int[] number = {-1,-8,-5,0,7,5,9,0,2,-4}
for(int i =0;i<number.Length;i++)
{
    if(number[i]>0)
    {
        number[i]+=1;
        Console.WriteLine(number[i]);
    }
    else if(number[i]==0)
    {
        Console.WriteLine(number[i]);
    }
    else
    {
        number[i]-=1;
        Console.WriteLine(number[i]);
}
Console.ReadKey();

//5.将一个字符串数组的元素的顺序进行反转,{"我","是","好人"}{"好人","是","我"}
//第i个和第length-i-1个交换

string[] word = {"我","是","好人","a"}
for(int i=0;i<word.Length/2;i++)
{
    string temp =word[i];
    word[i] = word[word.Length-1-i];
    word[word.Length-1-i] = temp;
}
for(int i=0;i<word.Length;i++)
{
    Console.WriteLine(word[i])
}
Console.ReadKey();

*冒泡排序

将一个数组中的而元素按照从大到小或者从小到大的顺序排列

int[] nums={9,8,7,6,5,4,3,2,1,0}
for(int i=0;i<nums.Length-1;i++)
{
    for(int j=0;j<nums.Length-1-i;j++)
    {
        if(nums[j]>nums[j+1])
        {
            int n=nums[j];
            nums[j]=nums[j+1];
            nums[j+1]=n;
        }
    }
}
for(int i=0;i<nums.Length.i++)
{
    Console.WriteLine(nums[i]);
}
Console.ReadKey();

第一次比较:8,7,6,5,4,3,2,1,0,9
    交换了9次
        i=0,j=nums.Length-1-i
第二次比较:7,6,5,4,3,2,1,0,8,9
    交换了8次
        i=1,j=nums.Length-1-i
第三次比较:6,5,4,3,2,1,0,7,8,9
    交换了7次
第四次比较:5,4,3,2,1,0,6,7,8,9,
    交换了6次
第五次比较:4,3,2,1,0,5,6,7,8,9
    交换了5次
第六次比较:3,2,1,0,4,5,6,7,8,9
    交换了4次
第七次比较:2,1,0,3,4,5,6,7,8,9
    交换了3次
第八次比较:1,0,2,3,4,5,6,7,8,9
    交换了2次
第九次比较:0,1,2,3,4,5,6,7,8,9
    交换了1次

但是实际上每一次都是比较了九次,修改代码如下

int[] nums={9,8,7,6,5,4,3,2,1,0}
for(int i=0;i<nums.Length-1;i++)
{
    for(int j=0;j<nums.Length-1;j++)
    {
        if(nums[j]>nums[j+1])
        {
            int n=nums[j];
            nums[j]=nums[j+1];
            nums[j+1]=n;
        }
    }
}
for(int i=0;i<nums.Length.i++)
{
    Console.WriteLine(nums[i]);
}
Console.ReadKey();

Array.Sort(nums);//只能针对数组做一个升序排列

Array.Reverse(nums);//对数组进行反转


方法/函数

[public] static 返回值类型 方法名([参数列表])

{

        方法体;

}

public:访问修饰符

static关键字:静态的

返回值类型:返回的值是什么类型,返回值类型就写什么

方法名:Pascal——要求每个单词的首字母都要大写,其余首字母小写

参数列表:要完成这个方法所必须提供给这个方法的条件,如果没有条件,()不能省略

方法就是将一堆代码进行重用的一种机制。方法就是一段代码,可能有输入的值(参数),可能有返回值。一个方法就像专门做这件事的人,我们调用它完成某件事的时候,它需要我们提供一些数据(参数),它执行完之后会给我们一个返回值。

方法写好后,想要被执行,必须要在Main()函数中调用,调用方法如下

类名.方法名([参数]);

如果你写的方法和Main()函数在同一个类中,类名可以省略。

        /// <summary>
        /// 计算两个整数之间的最大值,并且将最大值返回
        /// </summary>
        /// <param name="n1">第一个整数</param>
        /// <param name="n2">第二个整数</param>
        /// <returns>将最大值返回</returns>
public static int GetMax(int n1,int n2)
{
    return n1 > n2 ? n1 : n2;//ruturn作用1:在方法中返回要返回的值,
                                      //2.立即结束本次方法
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值