類型轉換:
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;
}