什么是数组?
1、数组也是一种数据类型(应用数据类类型)
2、数组是可以存放多个值
为什么要用数组?
当我们要存储相同类型的多个数据的时候,需要定义多个变量,这样在使用的不方便。因为数组是可以存储多个值,所以我们可以用数组来表示这个多个数据。
数组如何定义
基本数据类型定义
数据类型 变量名 = 变量值;
int a = 10;
数组定义:
数据类型 数组名;
int[] arr; 或者 int arr[];
数组的赋值
静态初始化
int[] arr = {10,15,12,7,20};
或者int[] arr1 = new int[]{1,2,3,4,5};
获取数组元素 数组[下标] arr[0]
动态初始化 长度必须要定义
int[] arr = new int[长度];
赋值 arr[0] = 1;
arr[1] = 10;
......
获取数组元素 数组[下标] arr[0]
数组遍历
- for循环遍历
//定义一个数组,输出数组中的每一个元素
String[] arr = {"cxk","lsis","wangwu","jack","rose","赵四"};
//int len = arr.length; //获取数组中的所有的元素------>遍历
for(int i =0 ; i < arr.length; i++) {
// i 被当做是数组的下标
System.out.println( arr[i] );
}
}
- 增强for循环
/*
* foreach循环
*
* 语法:
* (定义变量名)
* for(数组中的每一个元素的类型 遍历出来的每一个元素 :要遍历的数组){
*
* }
*/
String[] arr = {"cxk","lsis","wangwu","jack","rose","赵四"};
for(String a : arr) {
System.out.println(a);
}
// fore 快捷键 alt+/
for (String a : arr) {
System.out.println(a);
}
数组的默认值
/**
* 数组的默认值
基本数据类型
* 类型 默认值
* int 0
* byte 0
* short 0
* long 0
*
* float 0.0
* double 0.0
*
* char \u0000 GBK UTF-8 ASCII
*
* boolean false
*
*
* 引用数据类型
* String null 所有的引用数据类型的默认值都是null
*
* null 和 ""
null 指的是这个变量没有指向内存中的某一块空间
"" 指向的是内存中为""的字符串
* String s1 = null;
* String s2 = "";
*
*/
数组的特点
/**
* 1、数组是定长的(数组一旦定义,长度不能改变)
* 2、数组的长度用 数组名length获取
* 3、数组的下标从0开始,到长度-1结束
* 4、数组中的每一个元素的类型一致的
* 5、如果数组的下标超出范围,会报错(异常) ArrayIndexOutOfBoundsException 数组下标越界异常
*/
测试
1、定义一个数组, 输入一个数字, 得到这个数字在数组中的下标 (用方法做)
2、定义一个数字, 求最大值,最小值,平均值
参考代码
/**
* 1、定义一个数组, 输入一个数字, 得到这个数字在数组中的下标 (用方法做)
* 思路: 遍历数组,然用输入的数字与数组的每一个元素进行比较,如果相等,直接返回当前元素的下标
*
*/
public class Test1 {
public static void main(String[] args) {
int[] arr = {10,29,18,7,65,11};
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数字");
int num = sc.nextInt();
int index = method1(num,arr);
System.out.println("您输入的数字在数组中的下标为"+index);
}
public static int method1(int num,int[] arr) {
for (int i = 0; i < arr.length; i++) {
if(num == arr[i]) {
return i;
}
}
return -1;
}
}
/**
* 2、定义一个数组, 求最大值,最小值,平均值
* 思路:假设第一个数为最大值。与数组中的每一个元素进行比较,元素比最大值大,就把当前这个值赋给最大值
*
*/
public class Test2 {
public static void main(String[] args) {
int[] arr = {12,45,87,24,68};
//method(arr);
int[] arr1 = method1(arr);
System.out.println("数组的最大值为:"+arr1[0]);
System.out.println("数组的最小值为:"+arr1[1]);
System.out.println("数组的平均值为:"+arr1[2]);
}
//返回的是数组,将三个值放到数组中一起返回
public static int[] method1(int[] arr) {
int max = arr[0];
int min = arr[0];
int sum = 0;
for (int i = 0; i < arr.length; i++) {
if(max < arr[i]) {
max = arr[i];
}
if(min > arr[i]) {
min = arr[i];
}
sum += arr[i];
}
//定义一个数组,将最大值,最小值,平均值,放到数组中。
int[] arr1 = {max,min,sum/arr.length};
return arr1;
}
//求出最大值,最小值,平均值并输出
public static void method(int[] arr) {
int max = arr[0];
int min = arr[0];
int sum = 0;
for (int i = 0; i < arr.length; i++) {
if(arr[i] > max) {
max = arr[i];
}
if(arr[i] < min) {
min = arr[i];
}
sum = sum + arr[i];
}
System.out.println("数组的最大值为:"+max);
System.out.println("数组的最小值为:"+min);
System.out.println("数组的平均值为:"+sum/arr.length);
}
}
数组排序
冒泡排序
/**
* 对数组进行升序排列
*
*
* @param arr 要排序的数组
* @return 排序之后的数组
*/
public static int[] sort(int[] arr) {
// arr.length -1 比较轮数 i 外层 循环控制 比较轮数
for (int i = 0; i < arr.length -1; i++) {
//arr.length -1 比如 5个数最多只能比较4次 每一轮比较的次数 j 内层 循环控制 比较次数
// arr.length -1 -i 每一轮可以少比较一次
for (int j = 0; j < arr.length -1 -i ; j++) {
if(arr[j] > arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
return arr;
}
- 优化
public static int[] sort1(int[] arr) {
int count = 0;
for (int i = 0; i < arr.length -1; i++) {
//定义一个信号量 1,2,3,4,5
boolean flag = true;
for(int j = 0 ; j < arr.length-1 -i; j++) {
if(arr[j] > arr[j+1]) {
flag = false;
int temp = arr[j];
arr[j] =arr[j+1];
arr[j+1] = temp;
}
}
count++;
System.out.println("这个数组比较了"+count+"轮");
//判断flag
if(flag == true) {
return arr;
}
}
return arr;
}
- 选择排序
public static int[] sort(int[] arr) {
for (int i = 0; i < arr.length; i++) {
//假设当前这个数为最小的数字 min是这个数的下标
int min = i;
for (int j = i+1; j < arr.length; j++) {
if(arr[min] > arr[j]) {
min = j;
}
}
//等比较结束 min所对应的值为最小值
//arr[i] arr[min] min == i
if(min != i) {
int temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
return arr;
}
二分查找法
public class Demo8 {
public static void main(String[] args) {
//折半查找法前提:数组必须是有序的
int[] arr = {12,56,78,92,106,207,300};
int index = method(107, arr);
System.out.println(index);
}
public static int method(int num , int[] arr) {
int min = 0;
int max = arr.length -1;
while(min <= max) {
int middle = (max+min)/2;
if(num > arr[middle]) {
min = middle+1;
}else if(num < arr[middle]) {
max = middle -1;
}else {
return middle;
}
}
return -1;
}
}
网友评论