数组的概念
用来存放连续的一组相同数据类型的变量。
数组的特点
1.数组本质也是一个变量,既然是变量,就必须满足变量的三要素。
a.声明 int a; // 向计算机申请4个字节的内存空间 。
b.赋值 a = 10; //计算机将变量a翻译成内存地址,通过地址找到对应的空间,将10赋值给这个空间。
c.使用 a ++; //通过地址将a的数据取出,进行计算。
2.数组只能够存放相同的数据类型。
3.数组的声明表示将计算机申请连续的内存空间,数组的首地址就是第一个元素的地址 。[I@15db9742
4.数组的数据类型可以八大基本数据类型,也可以是引用类型。
数组的定义格式:
格式一: 数据类型[] 数组名 = new 数据类型[数组的长度]; (Java中写法)
格式二: 数据类型 数组名[] = new 数据类型[数组的长度]; (C语言的写法)
如何访问一个数组的元素:
数组名[索引]
索引/下标: 表示元素的位置,索引从0开始
java.lang.ArrayIndexOutOfBoundsException: 3
ArrayIndexOutOfBoundsException: 索引越界
产生原因: 访问了不存在的索引
解决办法: 检查索引是否超出了[0,3) 的范围
数组的初始化
静态初始化
格式一: 数据类型[] 数组名 = {元素1,元素2,元素3,元素4,元素5,…元素n};
格式二: 数据类型[] 数组名 = new int[]{元素1,元素2,元素3,元素4,元素5,…元素n};
动态初始化
数据类型[] 数组名 = new 数据类型[数组的大小];
可以采用以下三种方式初始化
1.逐个初始化
2.通过键盘输入
3.通过随机数初始化
###动态初始化和静态初始化的区别
静态初始化: 初始化的同时为每一个元素给出初始值,不需要指定数组的长度,系统会根据元素的个数去动态计算数组的长度。
动态初始化: 初始化的系统来为数组赋初始值,默认值是堆区的特点的默认值,但是必须由我们指定数组的长度。
数组的基本操作思想
遍历
// 循环输出数列的值并按照如下格式输出。arr[44,77,88,99,100,22]
//int[] arr = {44,77,88,99,100,22};
public static String name(int[] arr) {
String result = "";
result = "[";
//遍历数组
for (int i = 0; i < arr.length; i++) {
//去除最后一个,号
if (i ==arr.length - 1) {
result += arr[i];
}else {
result += arr[i] + ",";
}
}
result += "]";
return result;
}
求和
//求数列中所有数值的和
public static int number(int[] arr) {
//定义求和变量
int sum = 0;
//遍历数组
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
求最值
//求出最小值
public static int maximun(int[] arr) {
//假设最小值为第一个数
int min = arr[0];
//遍历每一个数
for (int i = 0; i < arr.length; i++) {
//比较每一个数
min = (min
}
return min;
}
倒置
//将数组倒置并输出 [22,100,99,88,77,44]
public static void convert(int[] arr) {
//遍历数组
for (int i = 0; i < arr.length / 2; i++) {
int block = 0;
block = arr[i];
//调换位置
arr[i] = arr[arr.length - 1 - i];
arr[arr.length - 1 - i] = block;
}
}
查找
//基本查找
public static boolean lookUp(int[] arr,int num) {
//定义返回值变量
boolean flag = false;
//遍历数组
for (int i = 0; i < arr.length; i++) {
//查找
if (arr[i] == num) {
flag = true;
break;
}
}
return flag;
}
//二分法查找 * 只能针对排序好的数列
public static boolean dichotomy(int[] arr , int n) {
boolean flag = true;
//定义最小索引和最大索引
int min = 0;
int max = arr.length-1;
//计算中间索引
int mid = (min + max) / 2;
while (arr[mid]!= n) {
if (arr[mid]>n) {
max = mid - 1;
}else if (arr[mid]
min = mid + 1;
}
if (min > max) {
return false;
}
//重新计算中间索引
mid = (min + max) / 2;
}
return flag;
}
排序
//冒泡排序
public static void bubbling(int[] arr) {
//外层循环控制排序次数
for (int i = 0; i < arr.length - 1; i++) {
//内层循环控制冒泡次数
for (int j = 0; j < arr.length - 1 - i; j++) {
//定义冒泡条件
if (arr[j] > arr[j+1]) {
//定义中间变量
int num = 0;
num = arr[j];
arr[j] = arr[j+1];
arr[j+1] = num;
}
}
}
}
//选择排序
public static void choice(int[] arr) {
//外层循环控制排序次数
for (int i = 0; i < arr.length; i++) {
//内层循环控制交换次数
for (int j = i + 1; j < arr.length; j++) {
//定义交换条件
if (arr[j] < arr[i]) {
//定义中间变量
int sum = 0;
sum = arr[j];
arr[j] = arr[i];
arr[i] = sum;
}
}
}
}