c# 課堂總結6 --集合與結構體

1、集合web

使用時必須添加 System.Collections數據庫

集合與數組的區別:數組

1:數組聲明瞭它容納的元素的類型,而集合不聲明。這是因爲集合以object形式來存儲它們的元素。初始化時集合無需定義多少個。
2:一個數組實例具備固定的大小,不能伸縮。集合則可根據須要動態改變大小。即,集合是一組可變數量的元素的組合,這些元素可能共享某些特徵,須要某種方式一塊兒操做。通常來講,這些元素的類型是相同的。
3:數組是一種可讀/可寫數據結構沒有辦法建立一個只讀數組。然而能夠使用集合提供的ReadOnly方 只讀方式來使用集合。該方法將返回一個集合的只讀版本。數組是連續的、同一類型的數據的一塊區域,而集合是不連續的、多種數據類型的。
2、集合的分類

    1.棧:Stack,先進後出,一個一個賦值,一個一個取值,按順序。數據結構

.count           取集合內元素的個數dom

.push()         將元素一個一個推入集合中//stack集合存入用.push()ide

.pop()           將元素一個個彈出集合spa

.clear()         清空集合code

.clone()       複製對象

 

eg一、彈出移除數據blog

  

eg二、彈出不移除數據

 string tanchu = ss.Peek().ToString();//只獲取最後進去的那個數據值,不移除

1 Stack s = new Stack();//先存入的後取出
2             s.Push(1);
3             s.Push(2);
4             s.Push(3);
5 
6             Console.WriteLine(s.Pop()); //3
7             Console.WriteLine(s.Pop());//2

    2.queue:先進先出,一個一個的賦值一個一個的取值,按照順序。

  .count              取集合內元素的個數

.Enqueue()            進隊列集合//存入元素

.Dequeue()            出隊列集合

.clear                清空集合

 

1 Queue q = new Queue();
2             q.Enqueue(1);
3             q.Enqueue(2);
4             q.Enqueue(3);
5 
6             Console.WriteLine(q.Dequeue());//1
7             Console.WriteLine(q.Dequeue());//2
8             Console.WriteLine(q.Dequeue());//3

 

   3.hashtable:先進後出,一個一個賦值,但只能一塊兒取值。

     用於處理和表現相似key value的鍵值對,其中key一般可用來快速查找,同時key是區分大小寫;value用於存儲對應於key的值。Hashtable中keyvalue鍵值對均爲object類型,因此Hashtable能夠支持任何類型的key value鍵值對.

.Add(,)              添加key和元素//用於元素添加

.Remove()        將括號內的元素移除

.contains()       判斷集合中是否有括號內的元素

.count               計算集合中元素的個數

 1 Hashtable hshTable = new Hashtable(); //  建立哈希表
 2 hshTable .Add("Person1",  "zhanghf");  //  往哈希表裏添加鍵值對
 3 hshTable .Clear();  //移除哈希表裏全部的鍵值對
 4 hshTable .Contains("Person1");   //判斷哈希表裏是否包含該鍵
 5 string name = (string)hshTable["Person1"].ToString(); //取哈希表裏指定鍵的值
 6 hshTable.Remove("Person1"); //  刪除哈希表裏指定鍵的鍵值對
 7 IDictionaryEnumerator en = hshTable.GetEnumerator();  //  遍歷哈希表全部的鍵,讀出相應的值
 8 while (en.MoveNext())
 9             {
10                string str = en.Value.ToString(); 
11             }

 目前下面的例子部分還看不懂

 1 class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             // 建立一個Hashtable實例
 6             Hashtable ht=new Hashtable(); 
 7  
 8             // 添加keyvalue鍵值對
 9             ht.Add("A","1");
10             ht.Add("B","2");
11             ht.Add("C","3");
12             ht.Add("D","4");
13  
14             // 遍歷哈希表
15             foreach (DictionaryEntry de in ht)
16             {
17                 Console.WriteLine("Key -- {0}; Value --{1}.", de.Key, de.Value);
18             }
19  
20             // 哈希表排序
21             ArrayList akeys=new ArrayList(ht.Keys); 
22             akeys.Sort();
23             foreach (string skey in akeys) 
24             {
25                 Console.WriteLine("{0, -15} {1, -15}", skey, ht[skey]);
26  
27             }
28  
29             // 判斷哈希表是否包含特定鍵,其返回值爲true或false
30             if (ht.Contains("A"))
31               Console.WriteLine(ht["A"]);
32              
33             // 給對應的鍵賦值
34             ht["A"] ="你好";
35  
36             // 移除一個keyvalue鍵值對
37             ht.Remove("C");
38  
39             // 遍歷哈希表
40             foreach (DictionaryEntry de in ht)
41             {
42                 Console.WriteLine("Key -- {0}; Value --{1}.", de.Key, de.Value);
43             }
44         
45             // 移除全部元素
46             ht.Clear();
47    
48             // 此處將不會有任何輸出
49             Console.WriteLine(ht["A"]);
50             Console.ReadKey();
51         }
52     }
3、結構體

一、結構體定義:至關因而咱們本身定義的一種複雜的類型(能夠說是一個小型的類),它能夠包含int...  double float bool char string  DateTime  數組類型。生活中大部份的對象都是複合型的對象。爲了面對這些複合型的對象,必需要定義一個相應的結構來知足對象的需求。

a、如何定義結構體類型?

通常來講結構體的定義要放在class的外面或class的裏面,儘可能不放在Main的裏面。

struct 自定義類型名

{

public 變量類型  變量名;

protected 變量類型  變量名;

privated   變量類型  變量名;

......;  

......;

 

}

例如:  

   struct Student  //自定義的數據類型。用來描述學生的信息。   

  {     

 public string XueHao;

 public string Name;      

 public int Age;     

 public double Score;     

 public bool Sex; (判斷的時候用 條件運算符(三目)來判斷)  

  }

b、如何用自定義的類型來定義變量?

自定義類型名 變量 = new 自定義類型名();

c、如何使用自定義類型的變量?

變量.子變量 = "xxxx"; Console.WriteLine(變量名.子變量);

eg:   

 //定義自定義類型的變量       

Student zhangsan = new Student(); 

//給變量賦值        

zhangsan.XueHao = "Y001";           

zhangsan.Name = "張三";         

zhangsan.Age = 22;           

  zhangsan.Sex = true;           

 zhangsan.Score = 100;  

  //對變量取值            

Console.WriteLine(zhangsan.XueHao+"\t"+zhangsan.Name+"\t"+zhangsan.Age+"\t"+zhangsan.Score+"\t"+(zhangsan.Sex?"男":"女");  

 二、例子

a、雙人對戰遊戲

  1  class Program
  2     {
  3         struct Player
  4         {
  5             public string name;
  6             public int blood;
  7             public int attack;
  8             public int defence;
  9             public int shanbi;
 10             public ArrayList jineng ;
 11             public ArrayList shanghai;
 12         }
 13 
 14         static void Main(string[] args)
 15         {
 16 
 17             #region 定義技能庫
 18             string [] jn = new string[10]{
 19                 "橫掃千軍",
 20                 "嘰嘰歪歪",
 21                 "龍騰",
 22                 "降龍十八掌",
 23                 "大鵬展翅",
 24                 "一陽指",
 25                 "六脈神劍",
 26                 "死亡一指",
 27                 "恩賜解脫",
 28                 "破釜沉舟",
 29             };
 30             int [] sh = new int[10]{
 31                 500,
 32                 300,
 33                 350,
 34                 500,
 35                 360,
 36                 400,
 37                 480,
 38                 490,
 39                 500,
 40                 450
 41             };
 42 
 43 
 44             #endregion
 45 
 46             Console.WriteLine("請輸入第一個玩家的姓名:");
 47             string name1 = Console.ReadLine();
 48 
 49             Console.WriteLine("請輸入第二個玩家的姓名:");
 50             string name2 = Console.ReadLine();
 51 
 52             #region 造玩家,賦初始值
 53 
 54             Player p1 = new Player();
 55             int seed1=0;
 56             if (name1.Length == 2)
 57             {
 58                 seed1 = (int)Convert.ToChar(name1.Substring(0, 1)) + (int)Convert.ToChar(name1.Substring(1, 1));
 59             }
 60             else
 61             {
 62                 seed1 = (int)Convert.ToChar(name1.Substring(0, 1)) + (int)Convert.ToChar(name1.Substring(1, 1)) + (int)Convert.ToChar(name1.Substring(2, 1));
 63             }
 64             Random r1 = new Random(seed1);
 65             p1.name = name1;
 66             p1.blood = 3000+r1.Next(1500);
 67             p1.attack = 200 + r1.Next(100);
 68             p1.defence = 80 + r1.Next(50);
 69             p1.shanbi = 2+r1.Next(2);
 70             p1.jineng = new ArrayList();
 71             p1.shanghai = new ArrayList();
 72             Random rj = new Random();
 73             for(int i=0;i<3;i++)
 74             {
 75                 int jnh = rj.Next(10);
 76                 string jnm = jn[jnh];
 77                 if (!p1.jineng.Contains(jnm))
 78                 {
 79                     p1.jineng.Add(jnm);
 80                     p1.shanghai.Add(sh[jnh]);
 81                 }
 82                 else
 83                 {
 84                     i--;
 85                 }
 86             }
 87 
 88             Player p2 = new Player();
 89             int seed2 = 0;
 90             if (name2.Length == 2)
 91             {
 92                 seed2 = (int)Convert.ToChar(name2.Substring(0, 1)) + (int)Convert.ToChar(name2.Substring(1, 1));
 93             }
 94             else
 95             {
 96                 seed2 = (int)Convert.ToChar(name2.Substring(0, 1)) + (int)Convert.ToChar(name2.Substring(1, 1)) + (int)Convert.ToChar(name2.Substring(2, 1));
 97             }
 98             Random r2 = new Random(seed2);
 99             p2.name = name2;
100             p2.blood = 3000 + r2.Next(1500);
101             p2.attack = 200 + r2.Next(100);
102             p2.defence = 80 + r2.Next(50);
103             p2.shanbi = 2 + r2.Next(2);
104             p2.jineng = new ArrayList();
105             p2.shanghai = new ArrayList();
106            
107             for (int i = 0; i < 3; i++)
108             {
109                 int jnh = rj.Next(10);
110                 string jnm = jn[jnh];
111                 if (!p2.jineng.Contains(jnm))
112                 {
113                     p2.jineng.Add(jnm);
114                     p2.shanghai.Add(sh[jnh]);
115                 }
116                 else
117                 {
118                     i--;
119                 }
120             }
121 
122 
123             #endregion
124 
125             #region 顯示玩家基礎信息
126             Console.WriteLine("玩家1:姓名:{0},血量{1},攻擊力{2},防護{3},閃避{4},所會技能1:{5},所會技能2:{6},所會技能3:{7}",p1.name,p1.blood,p1.attack,p1.defence,p1.shanbi,p1.jineng[0],p1.jineng[1],p1.jineng[2]);
127             Console.WriteLine("玩家2:姓名:{0},血量{1},攻擊力{2},防護{3},閃避{4},所會技能1:{5},所會技能2:{6},所會技能3:{7}", p2.name, p2.blood, p2.attack, p2.defence, p2.shanbi, p2.jineng[0], p2.jineng[1], p2.jineng[2]);
128             #endregion
129 
130             Console.WriteLine("--------------------------------------------");
131 
132             Console.WriteLine("請按空格鍵開始對戰");
133             ConsoleKeyInfo key = Console.ReadKey();
134             Console.Clear();
135             if (key.Key.ToString().ToLower() == "spacebar")
136             {
137                 #region 對戰
138 
139                 while (true)
140                 {
141                     //判斷退出條件
142                     if (p1.blood == 0 && p2.blood == 0)
143                     {
144                         Console.ForegroundColor = ConsoleColor.Yellow;
145                         Console.WriteLine("玉石俱焚了!");
146                         break;
147                     }
148                     else if (p1.blood == 0)
149                     {
150                         Console.ForegroundColor = ConsoleColor.Gray;
151                         Console.WriteLine(p2.name + "" + p1.name + "KO了。。。");
152                         break;
153                     }
154                     else if (p2.blood == 0)
155                     {
156                         Console.ForegroundColor = ConsoleColor.Gray;
157                         Console.WriteLine(p1.name + "" + p2.name + "KO了。。。");
158                         break;
159                     }
160 
161                     //開始打
162                     #region p1打p2
163                     //p1對p2進行毆打
164                     Random rdz = new Random();
165                     int dz1 = rdz.Next(10);
166                     if (dz1 > 7) //使用大招
167                     {
168                         int dzs = rdz.Next(3);
169                         Console.ForegroundColor = ConsoleColor.White;
170                         Console.WriteLine(p1.name + "使用了" + p1.jineng[dzs] + ",對" + p2.name + "形成了" + p1.shanghai[dzs] + "傷害!");
171                         p2.blood = p2.blood - Convert.ToInt32(p1.shanghai[dzs]);
172                         if (p2.blood <= 0)
173                         {
174                             p2.blood = 0;
175                         }
176                     }
177                     else //普通攻擊
178                     {
179                         int ptgjsb = rdz.Next(10);
180                         if (ptgjsb < p2.shanbi) //p2閃避
181                         {
182                             Console.ForegroundColor = ConsoleColor.Green;
183                             Console.WriteLine(p2.name + "躲避了" + p1.name + "的此次攻擊!");
184                         }
185                         else //未閃避
186                         {
187                             int p2sh = (p1.attack + rdz.Next(50)) - (p2.defence + rdz.Next(20));
188                             Console.ForegroundColor = ConsoleColor.Red;
189                             Console.WriteLine(p1.name + "" + p2.name + "進行了普通攻擊,形成了" + p2sh + "傷害!");
190                             p2.blood = p2.blood - p2sh;
191                             if (p2.blood <= 0)
192                             {
193                                 p2.blood = 0;
194                             }
195                         }
196 
197                     }
198                     #endregion
199                     #region P2打P1
200                     //p1對p2進行毆打
201                     int dz2 = rdz.Next(10);
202                     if (dz2 > 7) //使用大招
203                     {
204                         int dzs = rdz.Next(3);
205                         Console.ForegroundColor = ConsoleColor.White;
206                         Console.WriteLine(p2.name + "使用了" + p2.jineng[dzs] + ",對" + p1.name + "形成了" + p2.shanghai[dzs] + "傷害!");
207                         p1.blood = p1.blood - Convert.ToInt32(p2.shanghai[dzs]);
208                         if (p1.blood <= 0)
209                         {
210                             p1.blood = 0;
211                         }
212                     }
213                     else //普通攻擊
214                     {
215                         int ptgjsb = rdz.Next(10);
216                         if (ptgjsb < p1.shanbi) //p2閃避
217                         {
218                             Console.ForegroundColor = ConsoleColor.Green;
219                             Console.WriteLine(p1.name + "躲避了" + p2.name + "的此次攻擊!");
220                         }
221                         else //未閃避
222                         {
223                             int p1sh = (p2.attack + rdz.Next(50)) - (p1.defence + rdz.Next(20));
224                             Console.ForegroundColor = ConsoleColor.Red;
225                             Console.WriteLine(p2.name + "" + p1.name + "進行了普通攻擊,形成了" + p1sh + "傷害!");
226                             p1.blood = p1.blood - p1sh;
227                             if (p1.blood <= 0)
228                             {
229                                 p1.blood = 0;
230                             }
231                         }
232 
233                     }
234                     #endregion
235 
236                     Console.ForegroundColor = ConsoleColor.DarkYellow;
237                     Console.WriteLine(p1.name + "的剩餘血量爲:" + p1.blood + ",  " + p2.name + "的剩餘血量爲:" + p2.blood);
238 
239                     Console.ForegroundColor = ConsoleColor.White;
240                     Console.WriteLine("-----------------------------------------");
241                     Console.WriteLine();
242                     Thread.Sleep(2000);
243 
244 
245 
246                 }
247 
248                 #endregion
249 
250             }
251         }
252     }
View Code

b、輸出學生成績,並按總成績排序

 1  //輸出學生成績,用泛型集合 添加student 結構體類型的集合,比較好用。若是用arraylist 則得用多個集合湊起來,同時完成!
 2         static void Main11444(string[] args)
 3         {
 4             List<student> a = new List<student>();//至關於表格的列(個數),每一個學生的內容 至關於列
 5             Console.WriteLine("請輸入總人數:");
 6             int b = int.Parse(Console.ReadLine());
 7             //student[] r = new student[b];//也能夠這麼定義
 8 
 9             for (int i = 0; i < b; i++)
10             {
11                 student s = new student();
12                 Console.WriteLine("請輸入第{0}個學員的姓名:", i + 1);
13                 //a[i].name = Console.ReadLine();
14                 s.name = Console.ReadLine();
15 
16                 Console.WriteLine("請輸入第{0}個學員的年齡:", i + 1);
17                 s.age = int.Parse(Console.ReadLine());
18 
19                 Console.WriteLine("請輸入第{0}個學員的性別:", i + 1);
20                 s.sex = Console.ReadLine();
21 
22                 Console.WriteLine("請輸入第{0}個學員的Csharp成績:", i + 1);
23                 s.Csharp = Convert.ToDouble(Console.ReadLine());
24 
25                 Console.WriteLine("請輸入第{0}個學員的數據庫成績:", i + 1);
26                 s.database = Convert.ToDouble(Console.ReadLine());
27 
28                 Console.WriteLine("請輸入第{0}個學員的網頁成績:", i + 1);
29                 s.web = Convert.ToDouble(Console.ReadLine());
30 
31                 //Console.WriteLine("請輸入第{}個學員的姓名:", i + 1);
32                 s.sum = s.web + s.Csharp + s.database;
33 
34                 a.Add(s);
35             }
36 
37             for (int i = 0; i < a.Count - 1; i++)
38             {
39                 for (int j = 0; j < a.Count - 1 - i; j++)
40                 {
41                     if (a[j].sum < a[j + 1].sum)
42                     {
43                         student s = new student();
44                         s = a[j];
45                         a[j] = a[j + 1];
46                         a[j + 1] = s;
47                     }
48                 }
49             }
50 
51             Console.WriteLine("姓名\t年齡\t性別\tCsharp成績\t數據庫成績\t網頁成績\t總成績");
52 
53             foreach (student o in a)
54             {
55                 Console.WriteLine(o.name + "\t" + o.age + "\t" + o.sex + "\t" + o.Csharp + "\t" + o.database + "\t" + o.web + "\t" + o.sum);
56             }
57         }
View Code
相關文章
相關標籤/搜索