4.复杂数据类型-数组-一维数组
4.1 知识点
基本概念
- 数组是存储一组相同类型数据的集合。
- 数组分为一维、多维、交错数组。
- 一般情况下,一维数组就简称为数组。
- 声明一个变量可以理解为开辟了一个房间,而声明一个数组可以理解为连续分配了多个房间。
数组的声明
变量类型[] 数组名;
int[] arr1; //这种声明方式只是声明了一个数组,但是并没有开房。 //后面的代码要是想使用arr1,仍然要把数组new出来,所以这种方法比较少用。 arr1 = new int[5];
变量类型[] 数组名 = new 变量类型[数组的长度];
int[] arr2 = new int[5]; //这种声明方式相当于开了5个房间,但是房间里面的int值默认为0。
变量类型[] 数组名 = new 变量类型[数组的长度]{内容1, 内容2, 内容3, .......};
int[] arr3 = new int[5] { 1, 2, 3, 4, 5 }; //这种声明方式相当于开了5个房间,房间里面的int值分别为1, 2, 3, 4, 5。 //因为填了数组的长度,所以一定要初始化5个房间的值。
变量类型[] 数组名 = new 变量类型[]{内容1, 内容2, 内容3, .......};
int[] arr4 = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; //这种声明方式省略了数组的长度,后面的内容就决定了数组的长度(房间数)。
变量类型[] 数组名 = {内容1, 内容2, 内容3, .......};
int[] arr5 = { 1, 3, 4, 5, 6 }; //这种声明方式省略了数组的长度和new 变量类型[]。 //后面的内容就决定了数组的长度(房间数)。 //前面的变量类型决定了数组类型。
数组的使用
int[] array = { 1, 2, 3, 4, 5 };
数组的长度
// 数组变量名.Length Console.WriteLine(array.Length);//5
获取数组中的元素
//数组中的下标和索引是从0开始的。 //通过索引下标去获得数组中某一个元素的值时,一定注意不能越界,数组的房间号范围是 0 ~ Length-1。 Console.WriteLine(array[0]);//1 Console.WriteLine(array[2]);//3 Console.WriteLine(array[4]);//5 //Console.WriteLine(array[5]);//报错
修改数组中的元素
array[0] = 99; Console.WriteLine(array[0]);//99
遍历数组通过循环快速获取数组中的每一个元素
Console.WriteLine("**********************"); for (int i = 0; i < array.Length; i++) { Console.WriteLine(array[i]);//1 2 3 4 5 } Console.WriteLine("**********************");
增加数组的元素
// 数组初始化以后是不能够直接添加新的元素的。 // 要重新声明比原来数组更长的数组。 int[] array2 = new int[6]; //搬家,用循环把新数组前面的值赋值为旧数组的值。 for (int i = 0; i < array.Length; i++) { array2[i] = array[i]; } //让旧数组指向新数组,就是让旧数组指向了内存中的新地址。 array = array2; for (int i = 0; i < array.Length; i++) { Console.WriteLine(array[i]);//99 2 3 4 5 } //重新给新开的房子赋值。
删除数组的元素
// 数组初始化以后是不能够直接删除元素的。 // 要重新声明比原来数组更短的数组。 int[] array3 = new int[5]; //搬家,用循环把新数组前面的值赋值为旧数组的值。 for (int i = 0; i < array3.Length; i++) { array3[i] = array[i]; } //让旧数组指向新数组,就是让旧数组指向了内存中的新地址。 array = array3; Console.WriteLine(array.Length);//5
查找数组中的元素
// 99 2 3 4 5 // 要查找 3这个元素在哪个位置 // 只有通过遍历才能确定数组中是否存储了一个目标元素 int a = 3; //遍历数组判断值是否等于3 for (int i = 0; i < array.Length; i++) { if( a == array[i] ) { Console.WriteLine("和a相等的元素在{0}索引位置", i);//和a相等的元素在2索引位置 break; } }
总结
- 概念:同一变量类型的数据集合。
- 一定要掌握的知识:声明,遍历,增删查改。
- 所有的变量类型都可以声明为数组。
- 数组是用来批量存储游戏中的同一类型对象的容器,比如所有的怪物、所有玩家。
4.2 知识点代码
using System;
namespace Lesson02_一维数组
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("一维数组");
#region 知识点一 基本概念
//数组是存储一组相同类型数据的集合
//数组分为 一维、多维、交错数组
//一般情况 一维数组 就简称为 数组
//声明一个变量可以理解为开辟了一个房间,声明一个数组可以理解为连续分配了多个房间
#endregion
#region 知识点二 数组的声明
// 声明的数组的变量类型 可以是我们学过的 或者 没学过的所有变量类型
// 变量类型[] 数组名;
int[] arr1;
//这种声明方式 只是声明了一个数组 但是并没有开房
//后面的代码要是想使用arr1 仍然要把数组new出来 所以这种方法比较少用
arr1 = new int[5];
// 变量类型[] 数组名 = new 变量类型[数组的长度];
int[] arr2 = new int[5];
//这种声明方式 相当于开了5个房间 但是房间里面的int值 默认为0
// 变量类型[] 数组名 = new 变量类型[数组的长度]{内容1,内容2,内容3,.......};
int[] arr3 = new int[5] { 1, 2, 3, 4, 5 };
//这种声明方式 相当于开了5个房间 房间里面的int值分别为12345
//因为填了数组的长度所以一定要初始化5个房间的值
// 变量类型[] 数组名 = new 变量类型[]{内容1,内容2,内容3,.......};
int[] arr4 = new int[] { 1,2,3,4,5,6,7,8,9};
//这种声明方式 省略了数组的长度 后面的内容就决定了 数组的长度 “房间数”
// 变量类型[] 数组名 = {内容1,内容2,内容3,.......};
int[] arr5 = { 1,3,4,5,6};
//这种声明方式 省略了数组的长度和new 变量类型[]
//后面的内容就决定了 数组的长度 “房间数”
//前面的变量类型决定了数组类型
#endregion
#region 知识点三 数组的使用
int[] array = { 1, 2, 3, 4, 5 };
//1.数组的长度
// 数组变量名.Length
Console.WriteLine(array.Length);//5
//2.获取数组中的元素
//数组中的下标和索引 他们是从0开始的
//通过 索引下标去 获得数组中某一个元素的值时
//一定注意!!!!!!!!
//不能越界 数组的房间号 范围 是 0 ~ Length-1
Console.WriteLine(array[0]);//1
Console.WriteLine(array[2]);//3
Console.WriteLine(array[4]);//5
//Console.WriteLine(array[5]);//报错
//3.修改数组中的元素
array[0] = 99;
Console.WriteLine(array[0]);//99
//4.遍历数组 通过循环 快速获取数组中的每一个元素
Console.WriteLine("**********************");
for (int i = 0; i < array.Length; i++)
{
Console.WriteLine(array[i]);//1 2 3 4 5
}
Console.WriteLine("**********************");
//5.增加数组的元素
// 数组初始化以后 是不能够 直接添加新的元素的
// 要重新声明比原来数组更长的数组
int[] array2 = new int[6];
//搬家 用循环把新数组前面的值赋值为旧数组的值
for (int i = 0; i < array.Length; i++)
{
array2[i] = array[i];
}
//让旧数组指向新数组 就是让旧数组指向了内存中的新地址
array = array2;
for (int i = 0; i < array.Length; i++)
{
Console.WriteLine(array[i]);// 99 2 3 4 5
}
//重新给新开的房子赋值
array[5] = 999;
Console.WriteLine("**********************");
//6.删除数组的元素
// 数组初始化以后 是不能够 直接删除元素的
// 要重新声明比原来数组更短的数组
int[] array3 = new int[5];
//搬家 用循环把新数组前面的值赋值为旧数组的值
for (int i = 0; i < array3.Length; i++)
{
array3[i] = array[i];
}
//让旧数组指向新数组 就是让旧数组指向了内存中的新地址
array = array3;
Console.WriteLine(array.Length);//5
//7.查找数组中的元素
// 99 2 3 4 5
// 要查找 3这个元素在哪个位置
// 只有通过遍历才能确定 数组中 是否存储了一个目标元素
int a = 3;
//遍历数组判断值是否等于3
for (int i = 0; i < array.Length; i++)
{
if( a == array[i] )
{
Console.WriteLine("和a相等的元素在{0}索引位置", i);//和a相等的元素在2索引位置
break;
}
}
#endregion
//总结
//1.概念:同一变量类型的数据集合
//2.一定要掌握的知识:声明,遍历,增删查改
//3.所有的变量类型都可以声明为 数组
//4.数组 是用来批量存储游戏中的同一类型对象的 容器 比如 所有的怪物 所有玩家
}
}
}
4.3 练习题
创建一个一维数组并赋值,让其值与下标一样,长度为100
int[] array = new int[100];
for (int i = 0; i < array.Length; i++)
{
array[i] = i;
Console.WriteLine(array[i]);
}
创建另一个数组B,让数组A中的每个元素的值乘以2存入到数组B中
int[] arrayB = new int[100];
for (int i = 0; i < arrayB.Length; i++)
{
arrayB[i] = array[i] * 2;
Console.WriteLine(arrayB[i]);
}
随机(0~100)生成1个长度为10的整数数组
array = new int[10];
Random r = new Random();
for (int i = 0; i < array.Length; i++)
{
array[i] = r.Next(0, 101);
Console.WriteLine(array[i]);
}
从一个整数数组中找出最大值、最小值、总和、平均值(可以使用随机数1~100)
array = new int[10];
r = new Random();
for (int i = 0; i < array.Length; i++)
{
array[i] = r.Next(0, 101);
Console.WriteLine(array[i]);
}
int min = array[0];
int max = array[0];
int sum = 0;
int avg = 0;
for (int i = 0; i < array.Length; i++)
{
if (min > array[i])
{
min = array[i];
}
if (max < array[i])
{
max = array[i];
}
sum += array[i];
}
avg = sum / array.Length;
Console.WriteLine("最小值{0}最大值{1}总和{2}平均数{3}", min, max, sum, avg);
交换数组中的第一个和最后一个、第二个和倒数第二个,依次类推,把数组进行反转并打印
array = new int[10];
r = new Random();
for (int i = 0; i < array.Length; i++)
{
array[i] = r.Next(0, 101);
Console.WriteLine(array[i]);
}
Console.WriteLine("*****************");
for (int i = 0; i < array.Length / 2; i++)
{
int temp = array[i];
array[i] = array[array.Length - 1 - i];
array[array.Length - 1 - i] = temp;
}
for (int i = 0; i < array.Length; i++)
{
Console.WriteLine(array[i]);
}
将一个整数数组的每一个元素进行如下的处理:
如果元素是正数则将这个位置的元素值加1;
如果元素是负数则将这个位置的元素值减1;
如果元素是0,则不变
array = new int[10];
r = new Random();
for (int i = 0; i < array.Length; i++)
{
array[i] = r.Next(-10, 11);
Console.WriteLine(array[i]);
}
Console.WriteLine("*******************");
for (int i = 0; i < array.Length; i++)
{
if (array[i] > 0)
{
array[i] += 1;
}
else if (array[i] < 0)
{
array[i] -= 1;
}
Console.WriteLine(array[i]);
}
定义一个有10个元素的数组,使用for循环,输入10名同学的数学成绩,将成绩依次存入数组,然后分别求出最高分和最低分,并且求出10名同学的数学平均成绩
try
{
int[] scores = new int[10];
int min = 0;
int max = 0;
int sum = 0;
int avg = 0;
for (int i = 0; i < scores.Length; i++)
{
Console.WriteLine("请输入第{0}位同学的成绩", i + 1);
scores[i] = int.Parse(Console.ReadLine());
if (i == 0)
{
min = scores[i];
max = scores[i];
}
else
{
if (min > scores[i])
{
min = scores[i];
}
if (max < scores[i])
{
max = scores[i];
}
}
sum += scores[i
];
}
avg = sum / scores.Length;
Console.WriteLine("最高分{0}最低分{1}平均分{2}", max, min, avg);
}
catch
{
Console.WriteLine("请输入数字");
}
请声明一个string类型的数组 (长度为25)(该数组中存储着符号),通过遍历数组的方式取出其中存储的符号打印出以下效果
string[] strs = new string[25];
for (int i = 0; i < strs.Length; i++)
{
strs[i] = i % 2 == 0 ? "■" : "□";
}
for (int i = 0; i < strs.Length; i++)
{
if (i % 5 == 0 && i != 0)
{
Console.WriteLine();
}
Console.Write(strs[i]);
}
4.4 练习题代码
using System;
namespace Lesson02_练习题
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("数组练习题");
#region 练习题一
//请创建一个一维数组并赋值,让其值与下标一样,长度为100
int[] arrayA = new int[100];
for (int i = 0; i < arrayA.Length; i++)
{
arrayA[i] = i;
Console.WriteLine(arrayA[i]);
}
#endregion
#region 练习题二
//创建另一个数组B,让数组A中的每个元素的值乘以2存入到数组B中
int[] arrayB = new int[100];
for (int i = 0; i < arrayB.Length; i++)
{
arrayB[i] = arrayA[i] * 2;
Console.WriteLine(arrayB[i]);
}
#endregion
#region 练习题三
//随机(0~100)生成1个长度为10的整数数组
arrayA = new int[10];
Random r = new Random();
for (int i = 0; i < arrayA.Length; i++)
{
arrayA[i] = r.Next(0, 101);
Console.WriteLine(arrayA[i]);
}
#endregion
#region 练习题四
// 从一个整数数组中找出最大值、最小值、总合、平均值
//(可以使用随机数1~100)
arrayA = new int[10];
r = new Random();
for (int i = 0; i < arrayA.Length; i++)
{
arrayA[i] = r.Next(0, 101);
Console.WriteLine(arrayA[i]);
}
//第一次进入时 不存在 最大最小的概念
//可以认为 第一次 最大值最小值 都是第一个数
int min = arrayA[0];
int max = arrayA[0];
int sum = 0;
int avg = 0;
for (int i = 0; i < arrayA.Length; i++)
{
//如果当前的值 比min还要小 那么当前的值就是最小的值
if (min > arrayA[i])
{
min = arrayA[i];
}
//如果当前的值 比max还要大 那么当前的值就是最大的值
if (max < arrayA[i])
{
max = arrayA[i];
}
//每一次的值加上去 就是总和
sum += arrayA[i];
}
//平均数 用总合 / 个数
avg = sum / arrayA.Length;
Console.WriteLine("最小值{0}最大值{1}总合{2}平均数{3}", min, max, sum, avg);
#endregion
#region 练习题五
//交换数组中的第一个和最后一个、第二个和倒数第二个,依次类推,把数组进行反转并打印
arrayA = new int[10];
r = new Random();
for (int i = 0; i < arrayA.Length; i++)
{
arrayA[i] = r.Next(0, 101);
Console.WriteLine(arrayA[i]);
}
Console.WriteLine("*****************");
//交换 那就中间商不赚差价
//int temp = arrayA[0];
//arrayA[0] = arrayA[arrayA.Length - 1 - 0];
//arrayA[arrayA.Length - 1] = temp;
//temp = arrayA[1];
//arrayA[1] = arrayA[arrayA.Length - 1 - 1];
//arrayA[arrayA.Length - 1 - 1] = temp;
//temp = arrayA[2];
//arrayA[2] = arrayA[arrayA.Length - 1 - 2];
//arrayA[arrayA.Length - 1 - 2] = temp;
for (int i = 0; i < arrayA.Length / 2; i++)
{
int temp = arrayA[i];
arrayA[i] = arrayA[arrayA.Length - 1 - i];
arrayA[arrayA.Length - 1 - i] = temp;
}
for (int i = 0; i < arrayA.Length; i++)
{
Console.WriteLine(arrayA[i]);
}
#endregion
#region 练习题六
//将一个整数数组的每一个元素进行如下的处理:
//如果元素是正数则将这个位置的元素值加1;
//如果元素是负数则将这个位置的元素值减1;
//如果元素是0,则不变
arrayA = new int[10];
r = new Random();
for (int i = 0; i < arrayA.Length; i++)
{
arrayA[i] = r.Next(-10, 11);
Console.WriteLine(arrayA[i]);
}
Console.WriteLine("*******************");
for (int i = 0; i < arrayA.Length; i++)
{
//得到每一个元素 进行判断即可
if (arrayA[i] > 0)
{
arrayA[i] += 1;
}
else if (arrayA[i] < 0)
{
arrayA[i] -= 1;
}
Console.WriteLine(arrayA[i]);
}
#endregion
#region 练习题七
//定义一个有10个元素的数组,使用for循环,输入10名同学的数学成绩,
//将成绩依次存入数组,然后分别求出最高分和最低分,
//并且求出10名同学的数学平均成绩
//int[] arrayA = new int[10];
try
{
min = 0;
max = 0;
sum = 0;
avg = 0;
for (int i = 0; i < arrayA.Length; i++)
{
Console.WriteLine("请输入第{0}位同学的成绩", i + 1);
arrayA[i] = int.Parse(Console.ReadLine());
//第一次进来 min max 没有任何意义 所以第一次可以就认为该成绩即使 最高分也是最低分
if (i == 0)
{
min = arrayA[i];
max = arrayA[i];
}
else
{
//只有 除了第一次以外 才来进行 大小值的判断
if (min > arrayA[i])
{
min = arrayA[i];
}
if (max < arrayA[i])
{
max = arrayA[i];
}
}
sum += arrayA[i];
}
avg = sum / arrayA.Length;
Console.WriteLine("最高分{0}最低分{1}平均分{2}", max, min, avg);
}
catch
{
Console.WriteLine("请输入数字");
}
#endregion
#region 练习题八
//请声明一个string类型的数组(长度为25)(该数组中存储着符号),
//通过遍历数组的方式取出其中存储的符号打印出以下效果
string[] strs = new string[25];
//找到规律初始化
for (int i = 0; i < strs.Length; i++)
{
strs[i] = i % 2 == 0 ? "■" : "□";
//if( i % 2 == 0 )
//{
// strs[i] = "■";
//}
//else
//{
// strs[i] = "□";
//}
}
//每五个换一行
for (int i = 0; i < strs.Length; i++)
{
if (i % 5 == 0 && i != 0)
{
Console.WriteLine();
}
Console.Write(strs[i]);
}
#endregion
}
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com