数组

数组

1.存储相同数据类型的一组连续的数据
2.数组的特点
a.数组本身也是一个变量,既然是变量(局部变量),那么在栈区开辟空间,先声明再赋值再使用
b.数组的数据类型可以是八大基本数据类型和引用类型,数组本身是引用类型
c.创建数组我们需要使用到new,那么new出来的在堆区开辟,所以数组会同时在栈区和堆区开辟空间
d.如果一个数组没有指向堆区某块内存地址,这个时候数组变量为null,如果使用这个变量会出现空指针异常
e.如果一个数组访问了不存在的索引,会出现数组越界
3.格式
a.int[] arr = new int[5];
b.int arr[] = new int[5];
注意:int arr[] = new int[];是错误的
4.数组的初始化
a.静态初始化: 在定义数组的时候先给出元素,然后系统会根据元素的个数计算长度,这种初始化不会指定数组的长度
int[] arr = {11,22,33,44,55};
int[] arr = new int[]{11,22,33,44,55};
b.动态初始化: 在定义数组的时候默认值为堆区变量的默认值,需要给出数组的长度
int[] arr = new int[5]; 默认值是0
5.数组的内存分配
内存分为:
a.栈区: 先进后出,类似于子弹夹,一般用来给局部变量开辟空间
b.堆区: 用于存储new出来的对象
堆区创建出来的对象都会有地址值,而数组变量就是用来存放这个地址的
凡事new出来的对象都有默认值
byte short int long 0
float double 0.0
char ‘\u0000’
boolean false
引用类型 null
堆区一旦被赋值为null的时候,原来的内存空间不会被立刻回收,而是在垃圾回收器空闲的时候回收
int[] arr = new int[5];
arr = null;
c.方法区
静态区
常量池
数组
6.数组的遍历
遍历: 获取数组中的每一个元素

	public static void printArr(int[] arr){
		for(int i= 0; i < arr.length; i++){
			System.out.println(ar[i]);
		}
	}

7.数组的动态快速初始化 (键盘输入 + 数组的动态初始化 + 数组的遍历)

	Scanner input = new Scanner(System.in);
	System.out.println("请输入学生的人数:");
	double num = input.nextDouble();
	double[] arr = new double[num];
	for(int i = 0; i < arr.length; i++){
		System.out.print("请输入第" + (i+1) + "个学生的成绩");
		arr[i] = input.nextDouble();
	}
	input.close();

8.数组的基本操作
1.数组的遍历 就是获取数组中的每一个元素

		for(int i = 0; i < arr.length; i++){
			System.out.println(arr[i]);
		}

2.求和求平均值

		double sum = 0.0;
		for(int i = 0; i < arr.length; i++){
			sum += arr[i];
		}
double average = sum / arr.length;

3.求最值
最值思想: 假设第一个数为最大值max,遍历获取到数组的每一个元素
拿到每一个元素和这个max进行比较
如果比假定的最大值还要大,那么将该数赋值给最大值

		public static int getMax(int[] arr){
			int max = arr[0];
			for(int i = 0; i < arr.length; i++){
				if(arr[i] > max){
					max = arr[i];
				}
			}
			return max;
		}

4.数组的倒置

		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;
			}
		}

5.数组的排序
冒泡排序

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;
						}
					}
				}
			}

数组
选择排序

			public static void selectSort(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 temp = 0;
							temp = arr[i];
							arr[i] = arr[j];
							arr[j] = temp;
						}
					}
				}
			}

数组
数组

计算30个学生的平均分

   我们了解数组的遍历,知道了如何获取数组的每一个元素
   如何来通过键盘输入给数组赋值呢?
*/
import java.util.Scanner;

public class ArrayDemo06 {
   public static void main(String[] args){
   	
   	Scanner input = new Scanner(System.in);
   	
   	int[] arr = new int[30];
   	for(int i = 0; i < arr.length; i++){
   		System.out.print("请输入第" + (i+1) + "个学生的成绩:");
   		arr[i] = input.nextInt();
   	}
   	
   	// printArray(arr);
   	
   	double averageScore = getAverageScore(arr);
   	System.out.println("全班的平均分为:" + averageScore);
   	
   } 
   
   public static void printArray(int[] arr){
   	for(int i = 0; i < arr.length; i++){
   		System.out.println(arr[i]);
   	}
   }
   
   /*
   	计算平均分
   	返回值类型: double
   	参数列表: int[] arr
   	方法名: getAverageScore
   */
   public static double getAverageScore(int[] arr){
   	/*
   		1.遍历获取到每一个学生的分数
   		2.累加求和
   		3.求平均值
   	*/
   	// 1.遍历获取到每一个学生的分数
   	int sum = 0;
   	for(int i = 0; i < arr.length; i++){
   		// 2.累加求和
   		sum += arr[i];
   	}
   	// 3.求平均值
   	int average = sum / arr.length; 
   	return average;
   }

}