数组的概念:
数组是一个容器,存放一组相同数据类型变量的容器
数组的格式:
数据类型[] 数组名; Java写法
数据类型 数组名[]; C语言写法
数组的特点:
1.数组本质是一个引用类型的变量,也必须先声明再赋值再使用
2.数组的初始化
回顾变量的初始化
a.声明: 告诉计算机开辟多大的内存空间
b.赋值: 编译器翻译变量所对应的地址值,通过地址值,将数据保存到地址对应的位置去
c.使用: 读取变量对应的地址,取出数值使用
数组
a.声明:告诉计算机开辟多大的连续的内存空间
b.赋值: 系统会默认赋值也可以自己赋值
c.使用
初始化格式
数据类型[] 数组名 = new 数据类型[数组的大小];
数据类型可以是八大基本数据类型,也可以是引用类型
数组名满足变量的命名规则,一般都是复数
new 开辟内存空间,在堆区开辟空间
数组大小: 容器的大小
访问数组中的元素:
数组名[下标/索引];
下标从0开始~数组的长度-1
java.lang.ArrayIndexOutOfBoundsException: 3
异常名称: 数组越界
产生原因: 访问数组的下标不在 0~数组的长度-1之间
解决办法: 检查范围
java.lang.NullPointerException
异常名称: 空指针异常
产生原因: 对象没有new,就访问对象成员
解决办法: 找对null值对象并且创建对象
数组的初始化
静态初始化
格式一: 数据类型[] 数组名 = {元素1,元素2,元素3,元素4,元素5,...元素n};
格式二: 数据类型[] 数组名 = new int[]{元素1,元素2,元素3,元素4,元素5,...元素n};
动态初始化
数据类型[] 数组名 = new 数据类型[数组的大小];
可以采用以下三种方式初始化
1.逐个初始化
2.通过键盘输入
3.通过随机数初始化
静态初始化和动态初始化的区别?
静态初始化: 初始化的同时为每一个元素给出初始值,不需要指定数组的长度,系统会根据元素的个数去动态计算数组的长度
动态初始化: 初始化的系统来为数组赋初始值,默认值是堆区的特点的默认值,但是必须由我们指定数组的长度
/*
* 有一个数列:8,4,2,1,23,344,12
* A 循环输出数列的值。arrayToString
* B 求数列中所有数值的和。
* C 求出最大值。
* D 将数组倒置并输出
* E 数组查找 猜数游戏:从键盘中任意输入一个数据,判断数列中是否包含此数。
* F 数组排序
*/
public class ArrayDemo06 {
public static void main(String[] args) {
int[] arr = {8,4,2,1,23,344,12};
System.out.println(arrayToString(arr));
System.out.println("和:" + getSum(arr));
System.out.println("最大值:" + getMaxValue(arr));
System.out.println("最小值:" + getMinValue(arr));
System.out.println("倒置前: " + arrayToString(arr));
reverseArray(arr);
System.out.println("倒置后: " + arrayToString(arr));
// Scanner input = new Scanner(System.in);
// int num = input.nextInt();
// System.out.println(isContainsNum(arr, num) ? "找到了该数" : "该数在数组中不存在");
// int index = baiscSearch(arr, num);
// System.out.println(index != -1 ? "找到了该数" + arr[index] : "该数在数组中不存在");
bubbleSort(arr);
System.out.println("冒泡排序后: " + arrayToString(arr));
}
/*
* 功能: 将数组中的元素转换成字符串
* 返回值类型: String
* 参数列表: int[] arr
* 方法名: arrayToString
*/
public static String arrayToString(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;
}
/*
* 功能:求数列中所有数值的和。
* 返回值类型: int
* 参数列表: int[] arr
* 方法名: getSum
*/
public static int getSum(int[] arr) {
// 1.定义求和变量
int sum = 0;
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
/*
* 功能: 求出最大值。
* 返回值类型: int
* 参数列表: int[] arr
* 方法名: getMaxValue
*/
public static int getMaxValue(int[] arr) {
// 1.假设第一个数为最大值
int max = arr[0];
// 2.遍历数组中的每一个元素
for (int i = 0; i < arr.length; i++) {
// 获取到每一个元素arr[i]
// 3.判断获取的元素是否比max大
if (arr[i] > max) {
// 4.设置arr[i]为最大值
max = arr[i];
}
}
return max;
}
/*
* 功能: 求出最小值。
* 返回值类型: int
* 参数列表: int[] arr
* 方法名: getMinValue
*/
public static int getMinValue(int[] arr) {
// 1.假设第一个数为最大值
int min = arr[0];
// 2.遍历数组中的每一个元素
for (int i = 0; i < arr.length; i++) {
// 获取到每一个元素arr[i]
// 3.判断获取的元素是否比max大
if (arr[i] < min) {
// 4.设置arr[i]为最大值
min = arr[i];
}
}
return min;
}
/*
* 功能: 将数组倒置并输出
* 返回值类型: void
* 参数列表: int[] arr
* 方法名: reverseArray
*
* {8,4,2,1,23,344,12} --> {12,344,23,1,2,4,8}
* 第一交换
* 第一个数和最后一个数交换位置
* int temp = 0;
* temp = arr[0];
* arr[0] = arr[arr.length - 1 - 0];
* arr[arr.length - 1 - 0] = temp;
*
* 第二次交换
* 第二个数和倒数第二个数交换位置
* int temp = 0;
* temp = arr[1];
* arr[1] = arr[arr.length - 1 - 1];
* arr[arr.length - 1 - 1] = temp;
*
* 第三次交换
* 第三个数和倒数第三个数交换位置
* int temp = 0;
* temp = arr[2];
* arr[2] = arr[arr.length - 1 - 2];
* arr[arr.length - 1 - 2] = temp;
*
* 循环体代码:
* int temp = 0;
* tmep = arr[i];
* arr[i] = arr[arr.length - 1 - i];
* arr[arr.length - 1 - i] = temp;
*
* 循环的次数
* 7个数 --> 交换3次
* 6个数 --> 交换3次
* 5个数 --> 交换2次
* 4个数 --> 交换2次
* i个数 --> 交换i/2次
*/
public static void reverseArray(int[] arr) {
for (int i = 0; i < arr.length / 2; i++) {
int temp = 0;
temp = arr[i];
arr[i] = arr[arr.length - 1 - i];
arr[arr.length - 1 - i] = temp;
}
}
/*
* 数组查找:从键盘中任意输入一个数据,判断数列中是否包含此数。
* 返回值类型: boolean
* 参数列表: int[] arr, int num
* 方法名: isContainsNum
*/
public static boolean isContainsNum(int[] arr, int num) {
// 默认概述在数组中不存在
boolean flag = false;
for (int i = 0; i < arr.length; i++) {
if (arr[i] == num) {
flag = true;
break;
}
}
return flag;
}
/*
* 数组查找:从键盘中任意输入一个数据,判断数列中是否包含此数。
* 返回值类型: int
* 参数列表: int[] arr, int num
* 方法名: baiscSearch
*/
public static int baiscSearch(int[] arr, int num) {
int index = -1;
for (int i = 0; i < arr.length; i++) {
if (arr[i] == num) {
index = i;
break;
}
}
return index;
}
/*
* 功能: 冒泡排序法
* 返回值类型: void
* 参数列表: int[] arr
* 方法名: bubbleSort
*/
public static void bubbleSort(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 temp = 0;
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
}