那麼由 = 鏈接起來的這個式子 就叫賦值表達式 程序員
解決異常的 辦法數組
for循環dom
常量 函數
常量在程序中 怎麼定義: const 類型 常量名= 值;學習
在程序中能夠改變常量的值嗎 不能夠 一旦改變 出錯了 this
變量spa
在程序中 是否是能夠改變的? 答案是確定的 對象
三元表達式 blog
表達式1?表達式2:表達式3;繼承
若是表達式1 的結果爲true 時候 執行表達式2 若是爲 false 執行 表達式3
好比說這個string str = 3 < 4 ? "哈哈" : "呵呵";
若是 3<4 成立 就顯示哈哈
若是不成立 顯示 呵呵
?:
if (條件) bool
{
// 語句1;
}
else
{
//語句2;
}
成立 就執行 語句1
不成立就執行 語句2
枚舉:
存儲的是肯定的值 好比: 性別:男女 只有這麼兩個值
方向 :東 南 西 北 只有四個 目前只考慮 四個
枚舉的定義:
在命名空間的大括號裏
須要一個 關鍵字 enum 名
{
}
枚舉用法 :
在主函數中
直接 枚舉的那個名. 就能夠了
注: 參數2和參數3 是雌雄共體的
//爲何要用枚舉
好處 1
更加規範了
好處 2
有智能提示 更加方便了
在 主函數 裏面 先 定義一個 枚舉類型 後面跟一個 變量名 進行賦值
枚舉類型 枚舉名 (變量名) = 枚舉類型名.值
若是想把字符串轉換成枚舉 怎麼作 能夠經過下面的 這個 「公式」 進行轉換
//(Gender)(Enum.Parse( typeof(Gender),"male"));
(待轉換的枚舉類型)(Enum.Parse(typeof(待轉換的類型),」字符串」))
XingBie xb=(XingBie)(Enum.Parse(typeof(XingBie), str));
枚舉類型能夠和int類型相互轉換
//Direction fx = Direction.北;
//int num = (int)fx;
//Console.WriteLine(num);
//Console.ReadKey();
結構
爲何要用結構
我能夠一次聲明多個不一樣類型的變量
結構的語法 :
[訪問修飾符] struct 結構的名字(本身定義的名字)
訪問修飾符 能夠省略不寫 可是咱們如今是初學者 因此 必須寫 public
public struct Penrson
{
\
//結構體
}
結構體裏 如何聲明變量
[訪問修飾符] 數據類型 變量名 ;
public string name ;
public char sex ;
結構的使用方法
在主函數(目前代碼都在主函數裏寫的)
首先聲明一個結構的 類型 如 :
怎麼用?
直接 變量名.age 就可使用了
定義一個 Person 的結構
在結構體裏有姓名 年齡 性別 工資
而後在主函數裏 聲明 這個結構
進行賦值
顯示出那我的的信息
l 數組
如何聲明 ?
數據類型 [ ] 變量名= new 數據類型[] {};
int [] nums=new int[]{};
聲明數組的幾種方法
下面是三種聲明數組的方式
四種方式
怎麼用 ?
筆記
Int [] nums=new int[]{};
數組的聲明
我要作升序 排列 兩兩比較 用大於號 若是前面的數 大於後面的這個數 成立 我就交換
9 8 7 6 5
第一趟 比較
第一趟 8 7 6 5 9 作了 4次比較
第二趟 7 6 5 8 9 作了 3次比較
第三趟 6 5 7 8 9 作了 2次比較
第四趟 5 6 7 8 9 作了 1次比較
Int temp=0;
// for(int j=0;j<nums.Length-1;j++)
{
For(int i=0;i<nums.Length-1-j;i++)
{
If(nums[i]>nums[i+1])
{
Temp=nums[i];
Nums[i]=nums[i+1];
Nums[i+1]=temp;
}
}
}
5 ,6 ,7, 8,9
方法的好處 第一: 方法就是代碼重用的一種機制
第二: 一個方法 能夠說完成一個功能
方法 (函數)
語法:
[訪問修飾符] static 返回值類型 方法名 ([參數列表])
{
//方法體 (一些代碼)
}
訪問修飾符 能夠省略 可是 咱們如今 剛學 因此 都要寫 public
Static 關鍵字 返回值類型 不能省略 如今因爲 咱們是初學者 還有說講 返回值
因此 都寫 void
方法名 : 就是本身起的名字 遵循 首字母大寫
() 不能夠省略
[參數列表] 或者說 裏面的參數 能夠省略 由於如今咱們是初學者 學最簡單的
方法的使用
如何調這個方法 ?
如今咱們寫的方法 在訪問修飾符 後面用的是static 關鍵字 因此 咱們的這個方法 叫靜態方法 怎麼用這個方法 咱們在 靜態方法中 類名.方法名();
若是沒有static 的方法 能夠理解爲非靜態方法 或者說 是實例方法 (後面會講的)
就可使用了
若是咱們定義(咱們寫的那個方法)方法 在同一個類中 我在其餘方法中調用的時候
能夠省略 那個類名
直接 寫 方法名() 括號不能夠省略
就能用了
局部變量 及變量的做用域
在方法中定義的變量稱爲局部變量,其做用域從定義開始,到其所在的大括號結束爲止.
若是你真的不理解 你能夠在主函數中 定義一個變量 而後在其餘的方法中 用這個變量 試一試 其結果是否是報錯了
在一個方法中想要訪問另外一個方法中的變量,怎麼辦?
第一 :經過參數 來解決 還有第二種方法 一會就說
我能夠定一個方法 或者說寫個方法 而後在方法的括號裏 定義一個變量 或者 本身 給寫了一個參數
而後在主函數中 調用這個方法 在調用的時候 我要給這個方法的括號 一個參數
//誰調用 誰 誰就是 調用者 被調用者 就是誰
以上是經過參數的形式 來解決 方法中想要訪問 另外一個方法中的變量
第二 經過 return 返回值
Public static void Add(int num1,int num2)
{
Int sum=Num1+num2;
}
這麼作 就是把兩個數 返回了
有返回值了 咱們 主要用到 的就是 return 經過return 把 我想要的給我返回來了
若是你把變量 定義到方法的外邊 或者說定義到這個類中 若是想在靜態方法中 訪問這個變量 要在定義的時候 加上static 修飾 這個時候 咱們一般叫 「字段」 靜態字段 或者通俗的說 靜態變量
方法返回值
方法返回值 如今返回多個值
剛剛咱們採用是返回一個數組的方式 來完成 題目的要求 返回了多個值
咱們雖然很高興的作到了
可是 事情有時候是可悲的 返回來的值的類型 都是同樣的 這令我不爽
我想要的是 返回多個值 而且 類型 不必定是相同的
那麼 我能不能作到
答案是確定 我有辦法
什麼辦法 ?
咱們能夠用 out ref 作到 那麼具體 怎麼作
咱們想要獲得方法中多個返回值 能夠用 out
一旦 我在方法的參數列表中用out 那麼 我後面的 那個變量 要賦初值
=============================================
如何使用out ===
===
咱們如今須要返回多個值 怎麼作? ===
===
在方法中 ===
Public static void ShowNumber(out int num) ===
{ ===
//這個時候 咱們給這個num 賦值 ===
} ===
在其餘方法中怎麼用這個方法呢? ===
===
static void Main(string [] args) ===
{ ======
//這是主函數,如今在這要調用那個方法 具體怎麼作?==
int num=0; ======
ShowNumber(out num); ===
} ===
// 這樣就能夠了 =========
簡單的理解就是 咱們能夠用out 解決想返回多個返回值的問題 =
上面的是經過 out 獲得多個返回值
下面 的 是經過ref 獲得多個返回值
這兩種方法 咱們均可以獲得多個返回值
區別:
out 經過你們觀察 他只能 把方法內的值 傳到 外邊
ref 能夠傳進去 也能夠傳出來
方法定義
[訪問修飾符] static 返回值類型 方法名 ([參數列表])
{
//方法體
}
public static void ShowHello()
{
}
Out ref
Out 只能把方法中的值 傳出來
Ref 能夠傳出來 也能夠傳進去
今天 主要內容 騎士飛行棋
輸入玩家名字的時候 不能爲空 並且 也不能與 另外一個玩家的名字相同
另外一個玩家的名字 也不能爲空
若是 如今擲骰子的 玩家 踩到了 對方 對方 返回原點了
兩個玩家擲骰子 能夠用 循環來作
騎士飛行棋 兩大塊
第一 畫地圖 畫
第二 擲骰子 玩
畫圖 用 0 表明 方塊
當 數組中的 值爲0時 我就畫 方塊
If(nums[i]==0)
{
Console.WriteLine(「方塊」);
}
0表示普通,顯示給用戶就是 □
1幸運輪盤,顯示組用戶就 ◎
2地雷,顯示給用戶就是 ☆
3暫停,顯示給用戶就是 ▲
4時空隧道,顯示組用戶就 卐
騎士飛行棋
首先 初始化地圖
而後畫地圖
利用循環畫地圖
用到的幾個座標
畫第一行地圖的時候 要進行各類的判斷 畫裏面的小圖標
畫第二行的時候 也要進行各類判斷 這樣 有不少代碼要重複
因此 把 畫小圖標的那些代碼 寫到一個方法裏 而後 用循環的方式畫圖
在循環裏分別調那個畫小圖標的方法
這樣利用座標以及循環 地圖就完成了
要注意的是 座標可能會 出現問題 有的座標是從作到右 有的座標是 從右到左
而後呢 就開始 玩家擲骰子了
擲骰子的時候 是要產生隨機數的
這個隨機數 咱們要用到Random r=new Random
每次 走的時候要提醒玩家 按任意鍵擲骰子 而後 再走路
在這裏 每次走完後 咱們都要進行 座標的判斷
接下來要考慮的是 玩家A有可能踩到 玩家B
一旦踩到了 就要 進行 判斷了
若是踩到了 就要 把對方踩到原點了
若是沒踩到 就要進行 管卡的 判斷了
如何進行管卡的判斷就要看Map裏面的值了
另外 至此 關於管卡顏色的問題 還留了個陷阱
面向對象
程序員
萬物皆 對象
什麼是對象
對象 就是指 看的見 摸得着 實實在在存在的
對象 特徵 和行爲
趙老師 特徵 :
白 放到煤堆裏看不見
高 1.56m
帥 和楊老師不帥
富 每天請楊老師吃飯
姓名 趙老師……
性別 ,男
年齡 43
行爲
吃飯
睡覺
喝水 蹭飯
輔導你們學習 咱們用 方法的
學生 張三的 上課
姓名
性別
年齡
窮
矮
咱們用方法 來 體現這個 行爲
l 張三(一個學生)\楊老師\鄰居售貨員張阿姨\李四的爸爸\李四的媽媽
這些對象 都有什麼屬性
名字
年齡
名族
性別
吃飯
睡覺
喝水
都有輪子
品牌
行駛證號
生產廠家
價格
行爲 開 停 跑 能載人
是否是人?
聲明
兩條腿
類 是對象的抽象 這麼理解起來 比較抽象
類 也能夠理解成 是對 對象的 一個總稱
張三 這個 對象 他的屬性 姓名 : 張三
年齡 20
上面的內容 是讓 你們 分清 對象 和類
======================================================================-
下面介紹 如何 代碼 寫 一個類
人類 張三; int a;
類的語法
[訪問修飾符] class 類名
{
成員;
......
}
訪問修飾符 可寫 可不寫 可是由於 咱們是初學者 要寫
Class 關鍵字
類名: 咱們本身起的 你們要記住 類名後面 沒東西了
{
成員 ;
}
public class Person
{
成員;
}
對象 有一些 特徵 和行爲
那麼在咱們 程序中 如何 表示 這個特徵 和行爲
咱們用 屬性 和 方法來表示
類的實例化
類的實例化,用關鍵字new
語法:
類 實例名 = new 類();
類的成員的訪問:
實例名.屬性 實例名.方法名();
張三 和李四 的名字 都存進去了 都跑哪去了 ?
訪問級別 沒聽過
訪問修飾符 聽過
封裝 ? 什麼玩意 ?
訪問修飾符 : 有好多啊
Public private (internal protected)
都不認識 …..
Public 咱們熟悉 並且 很是 熟悉
在類中 若是方法 加上了static 那麼 在咱們的主函數中 (說的不嚴謹)
想調用這個方法 就用類名.方法名(); 就能夠用這個方法了
加上static 後的方法 叫靜態方法
沒加呢 ? 實例方法
爲何咱們要單獨的添加一個類的文件呢?
是有緣由的,什麼緣由呢 ? 你猜
簡述 private、 protected、 public、 internal 修飾符的訪問權限。
private : 私有成員, 在類的內部才能夠訪問。
類中字段和方法默認的訪問修飾符 是private
public : 公共成員,徹底公開,沒有訪問限制。
internal: 當前程序集內能夠訪問。
protected : 保護成員,該類內部和繼承類中能夠訪問。
繼承 能夠簡單的理解 兒子 繼承 父親 的一些東西 (長相 )
類中字段和方法默認的訪問修飾符 是private
若是在類中 咱們定義的那個字段 不加上訪問修飾符 默認的是private
那麼這樣 這個字段 只能在本類中使用
在其餘的地方不能用
若是加上public 了 那麼也就是說在其餘的地方也可使用
屬性的定義 :
private string name; 這個是字段
private int age; 這也是個字段
咱們在調用的時候 實例名.屬性
//姓名 性別 年齡 身高 體重 職業 工資 愛好 QQ號碼 郵件
Private string name;
Public string Name
{
get{return name;}
set{name=value;}
}
要麼痛苦的繼續遊戲着, 堅持到最後 可能升級
要麼結束遊戲繼續痛苦, 如今就放棄 一無全部
屬性 和字段
靜態方法 只能 訪問 靜態字段
屬性的 快捷鍵 Ctrl+R+E
類的構造方法;
在咱們 寫一個類的時候 自動的給咱們寫了一個構造函數
而 構造函數 是無參數的
構造函數是用來建立 對象的特殊方法
方法名 和類名同樣 沒有返回值,連void都不用。
在建立對象的時候 就
構造函數的重載
this 指示代詞
屬性 共有的 任何地方能夠調用
字段 私有的 在本類中調用
屬性能夠控制 只讀或者只寫 、讀寫
字段呢?
總結起來 就這麼兩句話
在get中判斷的時候 我寫的那個方法中用到的那個參數 是Age(屬性)
在set 中判斷的時候 我寫的那個方法中用到的那個參數 是_age(字段)
出來 out
進去 出來 ref
字符串 處理
string 和String 前面的是 字符串 (數據類型) 後面的是類
可是看起來 沒什麼區別
轉換數組的 一個方法
轉換 小寫的一個方法
轉換 大寫 的一個方法
轉換字符串的一個方法
這又是一個方法
只要經過.(點) 就能夠調用不少不少的方法啦
一點就通 哪裏不會點哪裏 so easy
F1 更神奇 哪裏不會 按哪裏
類是否是能夠繼承
Person
Student
Teacher
三個類
由於學生和老師 他們 都是人
因此 抽象 出來了一個 「人」類
而後呢 我讓 學生和老師 都繼承 了Person
須要怎麼作呢 ? 在 Student後面加上一個冒號:Perosn
在Person中能夠有構造函數
子類中也能夠有構造函數
既然 都能構造函數
那我 可不能夠 也 調用一下 父類中的 構造函數呢
第一 若是子類繼承父類
是否是能夠自動的用到了 父類的字段 或者說屬性
經過一個有參的構造函數再用一個關鍵字base ()把參數傳過去了
子類 就能用到父類的構造函數 而後間接的 給父類的字段賦值了
里氏替換
is 的語法:
布爾類型 變量 = 子類對象 is 父類
若是布爾類型的變量爲true 轉換成功了
若是爲false 就是不能轉換 沒成功
is的用法
:
對象或者是實例 is 類型名
這個表達式能夠返回一個bool值,表示是否能夠轉化
判斷父類可否轉化爲子類的時候經常使用
父類要想轉成子類 要強制轉換 和以前的 in t和double 之間轉換很像
as 語法:
類型名 變量名 = 某個對象或實例 as 類型名;
類能夠進行轉換
隱式轉換 顯示轉換(強制轉換)
有的時候轉換可能會 出問題
能夠經過 is 或者as 進行 判斷轉換
這樣 就 不會報錯了
里氏轉換
Person p1=new Person();
Strudent stu=new Student();
Person p2=stu;
Student stu2=(Student)p1;
隱式轉換 強制轉換
is 或者 as 判斷 二者的區別 先判斷再轉換
Hashtable
一樣的 也能夠添加 和 刪除
hsb.Contains("234");
hsb.ContainsKey(123);
兩種方法 都是 找裏面的鍵 存不存在 沒什麼不同的 只是方便而已
就是查找這個 hashtable 裏面 有沒有這個鍵
由於 Hashtable
的add()方法裏 的參數是obj類型
那若是我想 把裏面的內容 讀出來的時候 是否是涉及到了 里氏轉換
foreach 語法: 的用法
foreach(要循環訪問的集合中對象的類型 表示集合中的元素的標識符 in 要循環訪問的集合或數組的名稱)
{
}
循環的過程
-> 老是從開始,一直循環到結束,中間不會停下來,除了break
臨時變量的類型
-> 設斷點查看
-> 使用var判斷
一、泛型集合
就是爲了專門處理某種類型
ArrayList對應的是 List<類型名>
-> 在尖括號中寫什麼類型,這個集合就變成了什麼類型的集合
-> 添加數據、插入數據、索引訪問數據都是這個類型的,不用考慮全部的轉化問題
Hashtable對應的是 Dictionary<鍵的類型, 值的類型>
-> 在尖括號中填入鍵的類型與值的類型,那麼這個集合就變成了一個指定的鍵值對模型
-> 其使用方式與Hashtable同樣
二、Hashtable
ArrayList爲何要有ArrayList
-> 由於數組的長度問題
-> 提供不少方法
泛型集合
List<T>集合 與Arrayist的區別是什麼?
-> 類型能夠自定義
Hashtable集合,爲何要有這個集合
-> 查找
-> 想要查找,就得有一個對應關係
-> 就是經過鍵值來提供
-> 就須要將鍵與值用一種辦法綁定到一塊兒
-> Add(鍵, 值)
-> 訪問鍵的時候,能夠直接找到值
-> 用什麼方法,經過鍵訪問到值
-> hashtable[鍵] 返回一個值
-> 可是hashtable中都是object類型,所以使用時要考慮強傳
泛型集合
Dictionary<TKey, TValue>集合 與Hashtable的區別
仍是類型問題
泛型類型
List<類型名>
用int作示例
一、建立:
List<int> intList = new List<int>();
二、加數據
intList.Add(int類型的數據);
intList.AddRange(int類型的數組與集合);
三、插入數據
intList.Insert(位子索引, 要插入的數據);
四、移除
intList.Remove(要刪除的數據);
intList.RemoveAt(要刪除的索引);
五、清空
intList.Clear();
六、如何得到集合的長度
intList.Count
七、怎麼訪問某一個數據
intList[index];
八、若是想要修改索引爲8的數據
intList[8] = 80;
//這些都是多年前學習的一點雜亂的東西 對我來講有些意義 因此今天就搬上來。