一维数组
**定义:**数组是具有索引的同类型对象的集合。来自《programming C# 中文版 第四版》
**分类:**一维数组、多维数组、交错数组。一般情况下,一维数组简称为数组。
**声明:**声明语句方式及其不同点
变量类型[] 数组名; ——>只定义了数组名,但没有分配存储空间。
变量类型[] 数组名 = new 变量类型[数组长度]; ——>默认值为0
变量类型[] 数组名 = new 变量类型[数组长度] {变量值1, 变量值2, …}; ——>变量值的数量必须与数组长度一致。
变量类型[] 数组名 = new 变量类型[] {变量值1, 变量值2, …}; ——>变量值数量决定数组长度。
变量类型[] 数组名 = {变量值1, 变量值2, …}; ——>简单写法
使用:
-
数组的长度 int arrayLength = array1.Length;
-
获取数组中的元素 Console.WriteLine(array1[1]);
-
修改数组中的元素 array1[1] = 100;
-
遍历数组
for (int i = 0; i < arrayLength; i++) { Console.WriteLine(array1[i]); }
-
增加数组的元素
//增加数组的元素 //重新创建一个新数组,数组长度更长, //然后,通过for循环实现旧数组内容到新数组的转移,再将旧数组名命名给新数组 //旧数组名所占有的原存储空间就会被当成内存垃圾回收掉 int[] array5 = new int[5]; for (int i = 0;i < arrayLength; i++) { array5[i] = array1[i]; }
-
删除数组的元素
重新创建一个新数组,数组长度更短,重新赋值,最后一个溢出被移除
-
查找数组中的元素
int searchNum = 0; for (int i = 0; i < array5.Length; i++) { if (array5[i] == SearchNum) { Console.WriteLine("100相对应的元素在数组Array5[{0}]索引位置", i); } }
-
批量存储游戏中的同类型对象,如怪物,玩家,便于统一管理。
练习题:
using System.Runtime.InteropServices;
namespace arrayPractice
{
internal class Program
{
static void Main(string[] args)
{
//习题一:
//请创建一个一维数组并赋值,让其值与下标一样,长度为100
//数组的下标:一个数组 int a[]={1,2,3,4,5};
//包含5个元素a[0],a[1],a[2],a[3],a[4],0~4即为数组的下标。
//int[] ints = new int[100];
//for (int i = 0; i < ints.Length; i++)
//{
// ints[i] = i;
// Console.WriteLine(ints[i]);
//}
//习题二:
//创建一个数组B,让数组A中的每个元素的值乘以2存入到数组B中
int[] arrayB = new int[] {10,10,20,60,50};
for (int i = 0;i < arrayB.Length;i++)
{
arrayB[i] *= 2;
Console.WriteLine(arrayB[i]);
}
//习题三:
//随机(0-100)生成一个长度为10的整数数组
//生成随机数
//语法:Random 随机变量名(r) = new Random();
//int randomNumber = r.Next(); 生成一个介于0和Int32.MaxValue之间的随机整数
//int randomInRange = random.Next(min, max + 1);生成一个介于最小值min和最大值max之间的随机整数
Console.WriteLine("*****************");
int[] arrayRan = new int[10];
for (int i = 0; i < arrayRan.Length; i++)
{
Random randomNum = new Random();
arrayRan[i] = randomNum.Next(0,101);
Console.WriteLine(arrayRan[i]);
}
//习题四:
//从一个整数数组中找出最大值、最小值、总和、平均值(可以使用随机数1-100)
int MaxNum = arrayRan[0];
int MinNum = arrayRan[0];
int Sum = arrayRan[0];
float Average;
for (int i = 0; i < arrayRan.Length-1; i++)
{
if (arrayRan[i+1]> MaxNum)
{
MaxNum = arrayRan[i+1];
}
if (arrayRan[i + 1] < MinNum)
{
MinNum = arrayRan[i + 1];
}
Sum += arrayRan[i+1];
}
//两个整数想除得到小数输出,需要乘以1.0f,或者用括号强转
//Average = (float)Sum / arrayRan.Length;
Average = Sum*1.0f / arrayRan.Length;
Console.WriteLine("最大值为:{0},最小值为:{1},总和为:{2},平均值:{3}",MaxNum,MinNum,Sum,Average);
//习题五:
//交换数组中的第一个和最后一个、第二个、和倒数第二个,依次类推,把数组进行反转并打印
int TemporaryNum;
int JudgeNum = (arrayRan.Length + arrayRan.Length % 2) / 2;
for (int i = 0;i < JudgeNum; i++)
{
TemporaryNum = arrayRan[i];
arrayRan[i] = arrayRan[arrayRan.Length - i - 1];
arrayRan[arrayRan.Length - i - 1]= TemporaryNum;
}
for (int i = 0; i < arrayRan.Length; i++)
{
Console.WriteLine(arrayRan[i]);
}
//习题六:
//将一个整数数组的每一个元素进行如下的处理
//如果元素是正数则将这个位置的元素值加1;
//如果元素是负数则将这个位置的元素值减1;
//如果元素是0,则不变
Console.WriteLine("*****************");
int[] array1 = new int[6] {-3,-8,8,9,0,2};
for (int i = 0; i<array1.Length; i++)
{
if(array1[i] > 0)
{
array1[i] += 1;
}
if (array1[i] < 0)
{
array1[i] -= 1;
}
Console.WriteLine(array1[i]);
}
//习题七:
//定义一个有10个元素的数组,使用for循环,输入10名同学的数学成绩,
//将成绩依次存入数组中,然后分别求出最高分,最低分,
//并且求出10名同学的数学平均成绩
Console.WriteLine("*****************");
float[] score = new float[10];
float HighestScore;
float LowestScore;
float SumScore;
float AverageScore;
try
{
for (int i = 0; i < score.Length; i++)
{
Console.WriteLine("请输入数学成绩");
score[i] = float.Parse(Console.ReadLine());
}
}
catch
{
Console.WriteLine("请输入数字!!");
}
HighestScore = score[0];
LowestScore = score[0];
SumScore = score[0];
AverageScore = score[0];
for (int i = 0; i < score.Length - 1; i++)
{
if (score[i + 1] > HighestScore)
{
HighestScore = score[i + 1];
}
if (score[i + 1] < LowestScore)
{
LowestScore = score[i + 1];
}
SumScore = SumScore + score[i + 1];
}
AverageScore = SumScore / score.Length;
Console.WriteLine("最高分={0},最低分={1},平均分={2}",HighestScore,LowestScore,AverageScore);
//练习题八:
//请声明一个string类型的数组(长度为25)(该数组中存储着符号),
//通过遍历数组的方式取出其中存储的符号打印出一下效果
//方式一:存储一个符号,打印一个
//string[] arraySymbol = new string[25];
//for (int i = 0; i < arraySymbol.Length; i++)
//{
// if (i % 2 == 0)
// {
// arraySymbol[i] = "■";
// }
// else
// {
// arraySymbol[i] = "□";
// }
// Console.Write(arraySymbol[i]);
// if (i!=0 && (i+1) % 5 == 0) { Console.Write("\n"); }
//}
//方式二:存储完所有符号,再打印
string[] arraySymbol = new string[25];
for (int i = 0; i < arraySymbol.Length; i++)
{
if (i % 2 == 0)
{
arraySymbol[i] = "■";
}
else
{
arraySymbol[i] = "□";
}
}
for (int i = 0; i < arraySymbol.Length; i++)
{
Console.Write(arraySymbol[i]);
if (i != 0 && (i + 1) % 5 == 0)
{
Console.Write("\n");
}
}
}
}
}