数组的详解(一步步结合案例分析 数组的易错及疑难)
2011-12-16 12:18
357 查看
数组的初始化
错误案例:
正确案例:
案例1:
案例2:
案例3:
案例4:
案例5:
案例6:
案例7:
案例8:
案例9:
下面来说下string数组,其实string 也是数组,而且是引用类型
案例1:
错误案例:
1.int[] array; array[10]=5; //错误 2.int[] array=new int[5]{1,2,3};//错误
正确案例:
1.int[] array=new int[5]; 2.int[] array={1,2,3,4,5}; 3.static void Main(string[] args) { // int arraysize = 5; 错误 const int arraysize = 5; int[] array = new int[arraysize] { 1, 2, 3, 4, 5 }; //这里需要输入常量值 } }
案例1:
class Program { static void Main(string[] args) { int[] newArray = new int[5];//这里有2步,声明数组,并且初始化 int[] newArray2 = { 1,2,3,4,5}; foreach (int i in newArray)//默认都是0,这里为什么要强调默认是0 因为我下面的案例用到了 { Console.WriteLine(i); } newArray = newArray2; foreach(int i in newArray) { Console.WriteLine(i); } Array.Resize(ref newArray,3);//修改数组的长度,并创建一个新数组,把原内容复制给新数组里去。 foreach (int i in newArray)//如果长度小于原长度,那么后面的数值都将删除 { Console.WriteLine(i); } Array.Resize(ref newArray,10);//如果长度大于原长度,后面的数值用0代替补全 foreach (int i in newArray) { Console.WriteLine(i); } } }
案例2:
class Program { static void Main(string[] args) { //计算投掷600次1-6出现的次数 int[] Array = new int[7];//array[1]代表face=1 Random rannum=new Random(); for (int counter = 0; counter <= 6000; counter++) { ++Array[rannum.Next(1, 7)];//默认的array[]=0,所以当array[1]出现1次就+1; } for (int face = 1; face <= 6; face++) { Console.WriteLine("face {0} is {1} ",face,Array[face]);//输出array[]的值,就是出现的次数 } } }
案例3:
class Program { static void Main(string[] args) { //计算 学生对咖啡店的评分次,并且列出每个评分出现多少次 int[] querys = { 1, 9, 10, 1, 5, 6, 7, 8, 4, 5, 10, 1, 3, 3, 9, 4, 2, 2 };//这是质量评分的集合 Console.WriteLine("咖啡店的评分次数:{0}次",querys.Length); //下面计算每个等级出现的次数 int[] frequency = new int[11];//这里为什么用10,因为最高的评分是10分 for (int i = 0; i < querys.Length; i++) { ++frequency[querys[i]];//把评分的分数作为他的下标,然后++这样就可以计算出次数 } for (int times = 0; times <frequency.Length; times++) { Console.WriteLine("{0}分的出现{1}次",times,frequency[times]); } } }
案例4:
static void Main(string[] args) { var array = new[] { 1, 2, 3, 1, 2, 1 }; //int array={ 1, 2, 3, 1, 2, 1 }; Console.WriteLine(array.Length); foreach(var i in array) { Console.WriteLine(i); } }
案例5:
class Program { static void Main(string[] args) { int[] ints = { 1,2,3,4,5}; Console.WriteLine("Lengths is {0}",ints.Length); Console.WriteLine("Array is:"); foreach (int i in ints) { Console.Write(i+""); } Console.WriteLine(); ChangeArray(ints); Console.WriteLine("Changed Array is:"); foreach (int i in ints) { Console.Write(i + ""); } } //static void ChangeArray(int[] array) //{ // for (int i = 0; i < array.Length; i++) // { // array[i] = array[i] * 2; // } //} static int[] ChangeArray(int[] array)//定义方法修改数组 { for (int i = 0; i < array.Length; i++) { array[i] = array[i] * 2; } return array; } }
案例6:
int[,] array = { { 1, 2, 3 }, { 2, 3, 4 }, { 3, 4, 5 } }; Console.WriteLine(array.Length);//9 int i = array.Rank;//维数 int x = array.GetLength(0);//行数 int s = array.GetLength(1);//列数
案例7:
static void Main(string[] args) { int[,] array = { {1,2,3},{4,5,6},{6,7,8}}; Console.WriteLine(array.GetLength(0));//行数 Console.WriteLine(array.GetLength(1));//列数 Console.WriteLine(array.Rank);//维数 for (int x = 0; x < array.GetLength(0);x++ )//遍历2维数组 { for (int y = 0; y < array.GetLength(1);y++ ) { Console.WriteLine("Array[{0}][{1}]:{2}",x,y,array[x,y]); } } }
案例8:
static void Main(string[] args) { //Console.WriteLine(SumAverage(1.0,2.0,3.0));//2 double[] array = { 1.2, 5.5, 6.5 }; Console.WriteLine(SumAverage(array));//4.4 Console.WriteLine(5.2);//5.2 } static double SumAverage(params double[] array)//方法,params参数可以允许传入任意数组 { double sum = 0; foreach (double n in array) //注意这里的double { sum += n; } return sum / array.Length; }
案例9:
class Program { static void Main(string[] args) { double[] doubleArray = { 1.6, 6.9, 6.5 }; Array.Sort(doubleArray);//从小到大重新排序,Array类的Sort方法 foreach (double n in doubleArray) { Console.WriteLine(n);//1.6 6.5 6.9 } double[] doubleArrayCopy = doubleArray;//引用的地址指向 同一块内存上的变量 Array.Resize(ref doubleArray, 7);//以前说到ref,ref传递进去的引用变量会改变,就是开辟了一个新内存 foreach(double n in doubleArray) { Console.WriteLine(n);//1.6 6.5 6.9 0 0 0 0 } foreach (double n in doubleArrayCopy) { Console.WriteLine(n);//1.6 6.5 6.9 还是原来的内存,用doubleArrayCopy这个变量引用内存中的地址 } Array.Reverse(doubleArrayCopy);//反转数组 foreach (double n in doubleArrayCopy) { Console.WriteLine(n);//6.9 6.5 1.6 } }
下面来说下string数组,其实string 也是数组,而且是引用类型
案例1:
static void Main(string[] args) { string strs = "string是char的只读数组"; char chars = strs[0]; Console.WriteLine(chars);//显示s //为了给各个字符赋值必须先转换成char数组 char[] charsArray = strs.ToCharArray(); foreach (char n in strs)//foreach(char n in charsArray) { Console.Write(n);//显示:string是char的只读数组 } }
相关文章推荐
- 详解值类型与引用类型 结合ref (利用案例一步步分析内存的变化)
- Ajax详解及其案例分析之如何获得Ajax对象,使用Ajax对象发送GET和POST请求,校验用户名,POST和GET请求时的乱码处理,实现级联的下拉列表
- 7.1.3 TimePicker结合案例详解
- spring心得3--bean的生命周期结合案例详细讲解@普通期图解与uml图解一并分析
- PCA (主成分分析)详解 (写给初学者) 结合matlab
- PCA (主成分分析)详解 (写给初学者) 结合matlab
- RACI 职责分配矩阵 模型使用详解及案例分析
- C++字符数组越界问题的一个案例分析
- ajax实现highchart与数据库数据结合完整案例分析(三)---柱状折线图
- 7.1.4 ScrollView结合案例详解
- php 二分法查找数组中某数值 案例分析
- 【转】抽象类那点事(一步步案例分析,为什么需要它)
- Android--ImageSwitcher案例分析详解
- 6.1.6 Gallery结合案例详解
- PHP数组操作简单案例分析
- Ajax详解及其案例分析
- 7.1.3 TimePicker结合案例详解
- 7.1.4 ScrollView结合案例详解
- Nginx基础详解,内涵案例分析
- 中小型网络最全的VLAN技术(四)——STP生成树原理详解及SMTP案例分析