数组的详解(一步步结合案例分析 数组的易错及疑难)

数组的初始化
错误案例:

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的只读数组
}
}









posted @ 2011-12-16 12:18  Anleb  阅读(665)  评论(3编辑  收藏  举报