數組_結構體類型_枚舉類型_類型轉換和foreach循環

類型轉換:

1).隱式轉換:我們不需要做什麼,編譯器自動識別;小範圍的類型賦值到大範圍類型的變量裏面

int aa = 15;
double bb = aa;
Console.WriteLine(bb);

2).顯示轉換:(強制轉換)需要指定轉換的目標類型,大範圍這種數據放到小範圍類型數據變量裏面,我們需要告訴編譯器,轉換的類型是什麼

float b = 1.5f;
int a;
a = (int)b;
Console.WriteLine(a);//輸出結果爲1

顯示轉換的方法一:在轉換值前面加(類型),但是這種轉換可以能會造成數據丟失

顯示轉換的另一種方式:Convert類中的ToInt32(),ToDouble()……等方式,但這種方式面子上要過的去,例如 如果定義的字符串的值爲:123.4,就只能轉換成小數類型而不能是整數類型,否則系統會報錯。

轉String類型:任何類型的變量都可以.ToString();

int a2 = 15;
string b2 = a2 + "";   //這三種方式都可以轉換成字符串類型的變量
//string b2 = Convert.ToString(a2);    
//string b2 = a2.ToString();
Console.WriteLine(b2);

常量:const關鍵字修飾的變量,稱爲常量;
常量的特點:在聲明的時候,賦值以後,不能二次賦值
語法:
const 類型 變量名 = 常量值;
const float Pl = 3.14f;
//PI = 3.1415926;//再次給常量賦值時報錯:PI不存在

枚舉類型:枚舉類型需要自定義  可以規範程序的開發
枚舉:確定數量,確定值的幾個取值,例如:春夏秋冬  男女  週一週二週三週四週五週六週日等
語法:
enum 枚舉名{
    值1,
    值2,
    ...
    值n
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace
{
    enum Gender  //定義枚舉類型Gender,裏面有兩個值:Male和Female
    {
        Male,
        Female
    }

    enum QQState
    {
        Online=1,
        Offline,
        Hidden,
        Leave,
        Busy
    }

賦值:枚舉名 變量名=枚舉名.值1   (枚舉的命名一般是Passcal命名規則)
示例:      

Gender gender=Gender.Male;
Console.WriteLine(gender);

判斷QQ是否在線:0→在線  1→離線  2→隱身
普通方式:  //可讀性差,0,1,2沒有具體含義

int state = 0;
if (state == 0)
{
    Console.WriteLine("在線狀態");
}

枚舉類型方法:

QQState state = QQState.Online;
if (state == QQState.Online)
{
    Console.WriteLine("在線狀態");
}

枚舉類型和int類型的相互轉化:
枚舉類型和int類型是相互兼容的,所以可以使用強制轉換

int state1 = (int)QQState.Online;
Console.WriteLine(state1); //結果爲:0

枚舉類型裏面的默認存儲的是int類型的值,並且後面的值總是前面的值+1,默認從0開始。
修改枚舉類型:在聲明枚舉名字後加:整數類型(short等),如改成其他類型則會報錯

int state2 = (int)QQState.Online;
Console.WriteLine(state2);   //輸出:0
Console.WriteLine((int)QQState.Offline);  //輸出:1
Console.WriteLine((int)QQState.Hidden);   //輸出:2
Console.WriteLine((int)QQState.Leave);    //輸出:3
Console.WriteLine((int)QQState.Busy);     //輸出:4

int類型轉枚舉類型:根據枚舉的值精細轉換,如果值不存在,那不轉換,也不報錯直接輸出

QQState qq = (QQState)3;
Console.WriteLine(qq);  //輸出leave
QQState q2 = (QQState)10;
Console.WriteLine(q2);  //輸出:10

枚舉類型和string類型相互轉換:

枚舉類型轉字符串:直接.ToString()

QQState state3 = QQState.Online;
Console.WriteLine(state3.ToString());

字符串轉枚舉類型:

使用Enum.Parse(),括號中有兩個參數:參數1:需要傳入目標類型,用typeof獲取類型  參數2:需要傳入的值;然後進行強轉

QQState state4 = (QQState)Enum.Parse(typeof(QQState), "1");  
Console.WriteLine("state="+state4);  //輸出:state=offline
QQState state4 = (QQState)Enum.Parse(typeof(QQState), "1");  
Console.WriteLine("state="+state4);  //輸出:state=offline
QQState state4 = (QQState)Enum.Parse(typeof(QQState), "1");  
Console.WriteLine("state="+state4);  //輸出:state=offline

無論是字符串類型的數字還是普通的數字轉枚舉,如果值不匹配,不會報錯,直接輸出;但是如果轉的是字符串,若不匹配,會報異常

練習:輸入QQ狀態,1-在線,2-離線,3-隱身,4-離開,5-忙碌

            Console.WriteLine("請輸入你的QQ狀態:1-在線,2-離線,3-隱身,4-離開,5-忙碌");
            string statrStr = Console.ReadLine();
            QQState qqState = (QQState)Enum.Parse(typeof(QQState), statrStr);
            switch (qqState)
            {
                case QQState.Online:
                    Console.WriteLine("在線狀態");
                    break;
                case QQState.Offline:
                    Console.WriteLine("離線狀態");
                    break;
                case QQState.Hidden:
                    Console.WriteLine("隱身狀態");
                    break;
                case QQState.Leave:
                    Console.WriteLine("離開狀態");
                    break;
                case QQState.Busy:
                    Console.WriteLine("忙碌狀態");
                    break;
            }

結構體類型:一次聲明多個不同類型的變量(可以和枚舉同時使用)
語法:
           struct 結構體名{
                結構體成員;
            }

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace
{
    enum Gender  //定義枚舉類型Gender,裏面有兩個值:Male和Female
    {
        Male,
        Female
    }

    struct Person
    {
        public string name;
        public string gender;
        public int age;
        public string addr;
    }


           
賦值:

            Person p1;
            p1.name="張三";
            p1.gender = Gender.Male.ToString();
            p1.age = 20;
            p1.addr = "江蘇";

            Console.WriteLine(p1.name+"的性別是:"+p1.gender+",年齡是:"+p1.age+",地址是:"+p1.addr);

數組:
概念:可以存儲同一類型的一組(多個)數據
聲明方法:第一種和第二種是常用的,需掌握
1)數據類型[] 數組名 =new 數據類型[數組長度]

int[] intArr = new int[5];  //聲明瞭一個int 類型的數組intArr,長度爲5  聲明時確定了數組的類型和長度  

2)數據類型[] 數組名={元素1,元素2,元素3……元素n}   //聲明的時候直接初始化,知道類型 長度 和值

int[] intArr1 = { 1, 2, 3, 4, 5 };

3)數據類型[] 數組名==new 數據類型[數組長度]{元素1,元素2,元素3……元素n}   //知道長度,類型和值 如果再添加值就會報錯

int[] intArr2 = new int[5]{ 1, 2, 3, 4, 5 };

4)數據類型[] 數組名==new 數據類型[]{元素1,元素2,元素3……元素n}   //知道長度,類型和值  

int[] intArr3 = new int[] { 1, 2, 3, 4, 5 };

當你執行這句話時,就是在內存中開闢了5個空間,每個空間我們稱之爲元素(在未賦值時,默認爲0)
通過下標(索引)存取數據,下標從0開始
數組長度一旦確定,就不能改變

聲明string 類型的數組

string[] strArr = { "hello", "world", "nihao" };  //聲明瞭一個string類型的數字strArr,長度爲3,值爲:"hello", "worle", "nihao"

聲明的時候初始化用{},裏面的元素用逗號,隔開,訪問時,用下標進行訪問,  數組名[下標]

Console.WriteLine(strArr[1]);  //輸出:world  //如果下標不存在,會有下標越界的異常:

循環方式操作數組
示例:尋常數組賦值

            int[] nums = new int[5];
            nums[0] = 1;
            nums[1] = 2;
            nums[2] = 3;
            nums[3] = 4;
            nums[4] = 5;

用for語句賦值

            for (int i = 0; i < 5; i++)
            {
                nums[i] = i + 1;  
            }

數組的長度可以用 數組名.length來獲取:nums.length

用for循環取值

            for (int j = 0; j < nums.Length; j++)
            {
                Console.WriteLine("第{0}個元素的值爲:{1}",j+1,nums[j]);
            }
            


修改數組的值:數組名[下標]=新值;

            nums[1] = 10;
            Console.WriteLine(nums[1]);

foreach循環(var 關鍵字)
語法:
foreach (var 變量名 in 數據集合名)
{
    循環體;
}
含義:從數據集合中取出第一個元素賦值給變量名,然後執行循環體→執行完循環體之後,再取出第二個元素賦值給變量名,再去執行循環體→直到最後一個元素,再執行循環體,之後結束循環
示例:
 

            foreach (var item in nums)
            {
                Console.WriteLine("foreach:" + item);
            }

var 推斷類型,聲明變量的時候必須進行賦值(在不確定是什麼類型的數據的情況下可以用var來聲明變量)
var aa;  //未進行賦值,有異常提示:隱式類型的局部變量必須已初始化
var bb = 15;

數組練習題:

練習題1:從一個整數數組裏面取出醉倒的整數,最小整數,總合,平均值

            //我的代碼
            int[] myIntArr = new int[5];  //聲明一個整數型數組
            int n;
            //int max = myIntArr[0], min = myIntArr[0], sum = 0; //定義最大數max,最小數min並賦值爲第一個元素的值
            int max = int.MinValue, min = int.MaxValue, sum = 0; //定義最大數max,並將int範圍內的最小值賦值給它,定義最小數min,並將整數範圍內的最大值賦值給她,這樣做是爲了防止數組爲空數組而出現報錯的情況
            for (n = 0; n < myIntArr.Length; n++)  //循環輸入整數
            {
                Console.WriteLine("請輸入第{0}個元素的值:", n);
                myIntArr[n] = Convert.ToInt32(Console.ReadLine());
            }

            for (n = 0; n < myIntArr.Length; n++)  
            {
                if (max < myIntArr[n])  //判斷第n個元素與max的大小,
               {
                    max = myIntArr[n];  //如果大於max,就將第n個元素的值賦值給max,例如:如果第一個元素的值大於max,就將第一個元素的值賦值給max

                }

                if (min > myIntArr[n])  //判斷第n個元素與max的大小,
                {
                    min = myIntArr[n];  //如果小於於min,就將第n個元素的值賦值給min,例如:如果第一個元素的值小於min,就將第一個元素的值賦值給min
                    
                }

                sum += myIntArr[n];
            }
            Console.WriteLine("數組中最大的值是:{0},最小的數是:{1},總合爲:{2},平均數爲:{3}", max, min, sum, (double)sum / myIntArr.Length);


            //老師的代碼
            int[] myIntArr = { -5, 6, 89, 12, 7, 3 };
            int maxV = int.MinValue;//最大數
            foreach (var item in myIntArr)
            {
                if (maxV < item)
                {
                    maxV = item;
                }
            }
            Console.WriteLine("最大數是:"+maxV);

            int minV=int.MaxValue;//最小數
            for (int i = 0; i < myIntArr.Length; i++)
            {
                if (minV > myIntArr[i])
                {
                    minV = myIntArr[i];
                }
            }
            Console.WriteLine("最小數是:"+minV);

            int sum = 0;
            for (int j = 0; j < myIntArr.Length; j++)
            {
                sum += myIntArr[j];
            }
            Console.WriteLine("總和爲:"+sum);
            Console.WriteLine("平均數爲:" + (double)sum / myIntArr.Length);

 

練習題2:數組裏面都是人的名字,分割成:例如:“老楊|老蘇|老鄒……”(老楊,老蘇,老鄒|老虎|老牛|老蔣|老王|老馬)

            我的代碼
            string[] names = { "老楊", "老蘇", "老鄒", "老虎", "老牛", "老蔣", "老王", "老馬" };
            for (int i = 0; i < names.Length; i++)
            {
                if (i == names.Length - 1)
                {
                    Console.Write(names[i]);
                }
                else
                {
                    Console.Write(names[i] + "|");
                }
            }
           

            //老師的代碼
            string[] names = { "老楊", "老蘇", "老鄒", "老虎", "老牛", "老蔣", "老王", "老馬" };
            string result = "";
            for (int i = 0; i < names.Length-1; i++)
            {
                result += names[i] + "|";
            }
            result += names[names.Length - 1];
            Console.WriteLine(result);

練習題3:將一個整數數組的每一個元素進行如下的處理:如果元素時正數,則將這個位置的元素的值加1,如果是負數則減1,如果是0則不變

            int[] myIntArr1 = { 1, -2, 3, 0, 9, -4 };
            for (int aa = 0; aa < myIntArr1.Length; aa++)
            {
                if (myIntArr1[aa] > 0)
                {
                    myIntArr1[aa] += 1;
                }
                else if (myIntArr1[aa] < 0)
                {
                    myIntArr1[aa] -= 1;
                }
                Console.Write(myIntArr1[aa] + "  ");
            }

練習題4:將一個字符串數組的元素的順序進行反轉。例如:{"我","是","好人"}轉換成{"好人","是","我"}第i個元素和第length-i-1個元素進行交換

            string[] myStrArr = { "我", "是", "好人", "1" ,"hi"};
            for (int num = 0; num < myStrArr.Length / 2; num++)
            {
                string mystr = myStrArr[num];
                int length = myStrArr.Length;
                myStrArr[num] = myStrArr[length - num - 1];
                myStrArr[length - num - 1] = mystr;

            }
            foreach (var itm in myStrArr)
            {
                Console.WriteLine(itm);
            }

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace
{
    enum Gender  //定義枚舉類型Gender,裏面有兩個值:Male和Female
    {
        Male,
        Female
    }

    enum QQState
    {
        Online=1,
        Offline,
        Hidden,
        Leave,
        Busy
    }

    struct Person
    {
        public string name;
        public string gender;
        public int age;
        public string addr;
    }

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章