第十八节 常见错误、哈希表

View Code
案例1:

namespace e1
{
    public enum Genders 
    { 
        Male, 
        Female 
    }
   
    
    class Student
    {

        public Student(string name, int age, Genders gender, string hobby, int popularity)
        {
            this.name = name;
            this.age = age;
            this.gender = gender;
            this.hobby = hobby;
            this.popularity = popularity;
        
        }
        private string name;
        public string Name
        {
            set { name = value; }
            get { return name; }
        }
        private int age;
        public int Age
        {
            set
            {
                if (value >= 18 && value <= 120)
                {
                    age = value;
                }
                else
                {
                    age = 18;
                }
            }
            get { return age; }
        }

        private Genders gender;
        public Genders Gender
        {
            set { gender = value; }
            get { return gender; }
        }

        private string hobby;
        public string Hobby
        {
            set { hobby = value; }
            get { return hobby; }
        }

        private int popularity;
        public int Popularity
        {
            set { popularity = value; }
            get { return popularity; }
        }

        public void SayHi()
        {
            Console.WriteLine("姓名:{0},年龄:{1},性别:{2},爱好:{3},受欢迎度:{4}",name,age,gender,hobby,popularity);
        }

    }
}

——————————————————————————————————————————————————

namespace e1
{
    class Program
    {
        static void Main(string[] args)
        {
            ArrayList arr = new ArrayList();
           Student zhang = new Student("张靓靓", 25, Genders.Female, "唱歌", 100);
           Student jay = new Student("周杰杰", 29, Genders.Male, "双截棍", 110); 
           Student lishi = new Student("李四", 35, Genders.Male, "越狱", 120);
            //Add方法添加元素后返回所添加元素在ArrayList中的索引
            //添加的元素是什么类型的,都会隐式转换为object类型
            int index = arr.Add(zhang);
            arr.Add(jay);
            arr.Add(lishi);
            //取值的时候他的返回值也是一个Object的类型,通常我们要对他做一个强制转换
            //Student stu1 = (Student)arr[2];
            //stu1.SayHi();
            Console.WriteLine(index);//索引
            Console.WriteLine("清空前元素个数"+arr.Count);//元素
            Console.WriteLine(arr.Capacity);//容量

            //arr.Clear();
            //Console.WriteLine("清空后元素个数"+arr.Count);

            Console.WriteLine("删除前:");
            foreach (object obj in arr)
            {
                Student stu = (Student)obj;
                stu.SayHi();
            }
            Console.WriteLine("删除后:");
            //Remove方法通过对象来删除ArrayList里的元素,且自动更新索引
            //arr.Remove(jay);
            //arr.Remove(jay);
            //Remove通过索引来删除ArrayList里的元素,
            arr.RemoveAt(2);
            //foreach (object obj in arr)
            //{
            //    Student stu = (Student)obj;
            //    stu.SayHi();
            //}
            for (int i = 0; i < arr.Count; i++)
            {
                Student stu=(Student)arr[i];
                stu.SayHi();
            }

            Console.ReadKey();        
        }
    }
}

——————————————————————————————————————————————————————————————————————————————————————————————————————————

案例2:常见错误1

namespace e2
{
    public enum Genders 
    { 
        Male, 
        Female 
    }
   
    
    class Student
    {

        public Student(string name, int age, Genders gender, string hobby, int popularity)
        {
            this.name = name;
            this.age = age;
            this.gender = gender;
            this.hobby = hobby;
            this.popularity = popularity;
        
        }
        private string name;
        public string Name
        {
            set { name = value; }
            get { return name; }
        }
        private int age;
        public int Age
        {
            set
            {
                if (value >= 18 && value <= 120)
                {
                    age = value;
                }
                else
                {
                    age = 18;
                }
            }
            get { return age; }
        }

        private Genders gender;
        public Genders Gender
        {
            set { gender = value; }
            get { return gender; }
        }

        private string hobby;
        public string Hobby
        {
            set { hobby = value; }
            get { return hobby; }
        }

        private int popularity;
        public int Popularity
        {
            set { popularity = value; }
            get { return popularity; }
        }

        public void SayHi()
        {
            Console.WriteLine("姓名:{0},年龄:{1},性别:{2},爱好:{3},受欢迎度:{4}",name,age,gender,hobby,popularity);
        }

    }
}

———————————————————————————————————————————————————————————

namespace e2
{
    class Program
    {
        static void Main(string[] args)
        {
            //常见错误1
            //在删除ArrayList元素时由于它会自动的调整元素的索引
            //在删除是注意所删除的索引的位置,以下删除方式索引会越界
            ArrayList arr = new ArrayList();
            arr.Add(new Student("张靓靓", 25, Genders.Female, "唱歌", 100));
            arr.Add(new Student("周杰杰", 29, Genders.Male, "双截棍", 110));
            arr.Add(new Student("李四", 35, Genders.Male, "越狱", 120));
            arr.RemoveAt(0);
            arr.RemoveAt(1);
            //arr.RemoveAt(2);

            Console.ReadKey();
        }
    }
}

 

————————————————————————————————————————————————————————————————————————————————————————————————————————

案例3 常见错误

namespace e3
{
    public enum Genders 
    { 
        Male, 
        Female 
    }
   
    
    class Student
    {

        public Student(string name, int age, Genders gender, string hobby, int popularity)
        {
            this.name = name;
            this.age = age;
            this.gender = gender;
            this.hobby = hobby;
            this.popularity = popularity;
        
        }
        private string name;
        public string Name
        {
            set { name = value; }
            get { return name; }
        }
        private int age;
        public int Age
        {
            set
            {
                if (value >= 18 && value <= 120)
                {
                    age = value;
                }
                else
                {
                    age = 18;
                }
            }
            get { return age; }
        }

        private Genders gender;
        public Genders Gender
        {
            set { gender = value; }
            get { return gender; }
        }

        private string hobby;
        public string Hobby
        {
            set { hobby = value; }
            get { return hobby; }
        }

        private int popularity;
        public int Popularity
        {
            set { popularity = value; }
            get { return popularity; }
        }

        public void SayHi()
        {
            Console.WriteLine("姓名:{0},年龄:{1},性别:{2},爱好:{3},受欢迎度:{4}",name,age,gender,hobby,popularity);
        }

    }
}

——————————————————————————————————————————————-——————

namespace e3
{
    class Program
    {
        static void Main(string[] args)
        {
            //常见错误2
            //stu1和stu2他们成员的值虽然相同,但是他们所在的内存中所开辟的空间并不是同一个
            //所以删除stu2对象并不会把stu1对象也一起删除!
            Student stu1 = new Student("张三", 18, Genders.Male, "桌球", 100);
            Student stu2 = new Student("张三", 18, Genders.Male, "桌球", 100);
            ArrayList arr = new ArrayList();
            arr.Add(stu1);
            arr.Add(stu2);

            arr.Remove(stu2);

            Console.WriteLine("ArrayList中的元素个数:" + arr.Count);


            Console.ReadKey();
        }
    }
}
View Code
案例1:

namespace e4
{
    struct StudengtStruct
    {
        public string name;
        public int age;
        public StudengtStruct(string name, int age)
        {
            this.name = name;
            this.age = age;
        }
    
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            StudengtStruct stu1 = new StudengtStruct("张三", 25);
            StudengtStruct stu2 = new StudengtStruct("李四", 32);
            StudengtStruct stu3 = new StudengtStruct("王五", 28);
            ArrayList arr = new ArrayList();
            arr.Add(stu1);
            arr.Add(stu2);
            arr.Add(stu3);
            //结构是值类型,你在遍历ArrayList里的元素的时候,实际上将结构类型的值复制了一份给临时变量
            //所以临时变量转换为结构后,对结构进行修改不会影响到ArrayList中实际元素的值!
            foreach (object obj in arr)//仅仅复制一份给obj
            {
                StudengtStruct s = (StudengtStruct)obj;
                s.age = 60;
                Console.WriteLine(s.age);
            }

            foreach (object obj in arr)
            {
                StudengtStruct s = (StudengtStruct)obj;
                Console.WriteLine("姓名:{0},年龄:{1}",s.name,s.age);
            }
            Console.ReadKey();
        }
    }
}

 

——————————————————————————————————————————————

案例2:哈希表

using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;//导入
namespace e5
{
    class Program
    {
        static void Main(string[] args)
        {
            //哈希表:是以键(Key)值和(Value)对的方式存储的集合类,他的元素是以成对的方式向
            //Hashtable中添加的,我们可以通过他的键值快速找到他所对应的值!
            //无顺序!
            Hashtable ht = new Hashtable();

            ht.Add("香蕉", 3);
            ht.Add("苹果", 5);
            ht.Add("菠萝", 6.5);
            ht.Add("柚子", 2);
            ht.Add("火龙果", 4.5);

            Console.WriteLine("ht哈希表中存放的元素个数为:{0}",ht.Count);
            Console.WriteLine("柚子价格:"+ht["柚子"]);
            Console.WriteLine("菠萝价格:"+ht["菠萝"]);
            Console.WriteLine("苹果价格:" + ht["苹果"]);
            Console.WriteLine("火龙果价格:" + ht["火龙果"]);

            ht.Remove("柚子");
            Console.WriteLine("ht哈希表中存放的元素个数为:{0}", ht.Count);


            Console.WriteLine("\n遍历Hashtable中的所有的值:");
            foreach (object obj in ht.Values)
            {
                Console.WriteLine(obj.ToString());
            }

            Console.WriteLine("\n遍历Hashtable中的所有的键:");
            foreach (object obj in ht.Keys)
            {
                Console.WriteLine(obj.ToString());
            }

            Console.WriteLine("\n遍历Hashtable中的所有的键和值:");
            foreach (object obj in ht.Keys)
            {
              string  Key=obj.ToString();
                Console.WriteLine("{0}:{1}",Key,ht[Key]);
            }
             Console.ReadKey();
        }
    }
}

 

posted @ 2012-06-20 21:11  ComBat  阅读(200)  评论(0编辑  收藏  举报