1、数组
/**

1、数组是什么?为什么需要使用数组

* 比如我要统计每位员工的工资,我得定义多个变量去
	 * 分开存储,如果过多员工,就太麻烦了。
	 * 
	 * 那么我怎么用一个变量来存储多个员工的工资呢?
	 * 可以使用数组,数组就是一个大的容器,它可以存放多个值

2、什么是数组?

* 数组和变量差不多,都是存放数据的,不同的是变量只能
	 * 保存一条数据,而数组可以保存多条数据,前提是这多条数据必须是
	 * 同一类型的
	 * 数组是引用数据类型

3、如何定义数组?

* 数组类型[] 数组名;
	 * 如果定义好数组以后,必须给数组进行初始化。
	 * 数组初始化分为两种情况:
	 * (1)动态初始化:指定数组的长度。弊端是:一旦长度指定,就是数组中只能存放多少数据
	 * 第一种:
	 * 数组类型[] 数组名=new 数组类型[数组长度];
	 * 第二种:
	 * 数组类型[] 数组名;
	 * 数组名=new 数组类型[数组长度];
	 * (2)静态初始化:不是指定数组长度,而是直接在初始化时给数组进行赋值
	 * 第一种:
	 * 数组类型[] 数组名=new 数组类型[]{数据1,数据2,数据3...};
	 * 第二种:
	 * 数组类型[] 数组名;
	 * 数组名=new 数组类型[]{数据1,数据2,...};
	 * (3)最简单的一种方式
	 * 数组类型[] 数组名={数据1,数据2,...};
	 * 
	 */

参考代码:

//1、定义了一个数组,并进行动态初始化第一种
		/**
		 * int:数组类型是int类型的,也说明了这个数组, 只能存放整数,
		 * 而且只能存放9个整数
		 * array:数组名
		 */
		int [] array=new int [9];
		
		//2、动态初始化的第二种
		double [] array1;
		array1=new double[10];
		
		//创建好了数组,如何给数组进行赋值?通过数组的下标进行赋值,数组的下标从0开始
		array[0]=10;//给数组的第一个元素进行赋值
		array[1]=11;
		//array[8]="aaa";  因为定义的数组是int型的
		//array[9]=20;数组下标越界了
		
		//3、静态初始化的第一种
		int []array2=new int[] {8,9,19,45};
		System.out.println(array2[3]);//45
		
		//4、静态初始化的第二种
		int [] array3;
		array3=new int[] {67,89,1,33};
		System.out.println(array3[0]);//67
		
		//5、最简洁的方式创建数组
		int [] array4= {12,3,2,5,6};
		System.out.println(array4[0]);//12
		
		//6、如果我想获取数组的长度,怎么办呢?数组名.lenght
		System.out.println("array4的长度:"+array4.length);

4、数组最常见的异常:

//7、数组中最常见的几种异常
		int [] a=new int [3];
	//	System.out.println(a[3]=6);java.lang.ArrayIndexOutOfBoundsException数组下标越界异常
		int [] b=null;
	//	System.out.println(b[0]);java.lang.NullPointerException空指针异常

5、遍历数组

int [] array=new int[] {12,4,6,34,90,89};
		//我想获取数组的每一个元素的值
		
		//for循环,i代表数组的下标
		System.out.println("使用for循环遍历数组");
		for(int i=0;i<array.length;i++) {
			System.out.println(array[i]);
		}
		
		//foreach(for循环的增强版)
		System.out.println("使用foreach循环遍历数组");
		/**
		 * for(定义变量接受数组的每一个元素值:要遍历的数组名)
		 * 
		 * 数组遍历只有这两种方式
		 */
		for(int a:array) {
			System.out.println(a);
		}

6、数组分类
/**
* 数组分类
* 1、基本数据类型的数组
* 动态初始化数组以后,数组的元素都会赋予一个默认的值
* byte short int long float double char boolean
* 0 0 0 0 0.0 0.0 空格 false
* 2、引用数据类型的数组
* String 接口 自己定义的类
* 引用数据类型的默认值为null
*/
参考代码:

//int类型的数组
		int []num=new int[5];
		num[0]=10;
		num[3]=12;
		for(int n:num) {
			System.out.println(n);
		}
		System.out.println("============");
		//double类型
		double []d=new double[5];
		System.out.println(d[0]);//0.0
		System.out.println("============");
		//char类型
		char []c=new char[6];
		System.out.println("-"+c[0]+"-");//空格
		System.out.println("============");
		//布尔类型
		boolean [] b=new boolean[3];
		System.out.println(b[0]);
		System.out.println("============");
		//String
		String [] str=new String[5];
		str[0]="张三";
		for(String s:str) {
			System.out.println(s);//null
		}

7、数组里的数据为什么会有默认值呢?

/**

* java中的内存是怎么进行分配的?

* 内存的申请和释放都是jvm进行管理的,java程序要运行,jvm

* 会自动的向电脑申请一块内存。

* 把这块内存分为5部分:

* 1、栈(Stack):主要存放局部变量

* 2、堆(Heap):凡是new出来的东西都在堆里卖弄,堆

* 当中的数据都有默认原则

* 3、方法区(Method Area):存放的是与.class相关的信息

* 4、本地方法区(Native Method Area):与操作系统有关

* 5、寄存器(Register):与cpu有关

*/

java不平均分配_数据


8、其他参考题目:

/**
		 * 1、求出学生成绩的总分、平均分、最高分、最低分
		 * 
		 */
		double [] score=new double [] {90,89,56,87};
		//求总分
		double sum=0;
		double max=score[0],min=score[0];
		
		for(int i=0;i<score.length;i++) {
			if(score[i]>max) {
				max=score[i];
				
			}
			if(score[i]<min) {
				min=score[i];
				
			}
			sum+=score[i];
		}
		System.out.println("总分:"+sum);
		//求平均分
		double avg=sum/score.length;
		System.out.println("平均分为:"+avg);	
		System.out.println("最高分为:"+max);
		System.out.println("最低分为:"+min);
/**
		 * 2、将{"C语言","C++","C#","Java","Python"};
		 * 逆序输出。
		 */
		
		String [] str=new String[] {"C语言","C++","C#","Java","Python"};
/**		for(int i=0;i<str.length;i++) {
			String temp=str[i];
			str[i]=str[str.length-1-i];
			str[str.length-1-i]=temp;
			System.out.println(str[i]);
		}
		//这段注释掉的代码时错误的
*/
		
		
		for(int i=0;i<str.length/2;i++) {
			String temp=str[i];
			str[i]=str[str.length-1-i];
			str[str.length-1-i]=temp;
			
			}
		for(String s:str) {
			System.out.print(s+"\t");
		}
		System.out.println();
//		System.out.println("================");
//		
//		for(int i=str.length-1;i>=0;i--) {
//			System.out.print(str[i]+"\t");
//		}   
//上面注释的代码是可以与上面的互替的

8、冒泡排序
/**
* 冒泡排序
* 核心思想:
* 数组中的元素两两比较
* 如:10 20 30 40 50 60
*
* 第一趟:比较了5次
* 20 30 40 50 60 10
* 第二趟:比较了4次
* 30 40 50 60 20 10
* 第三趟 :比较了3次
* 40 50 60 30 20 10
* 第四趟:比较了两次
* 50 60 40 30 20 10
* 第五趟:比较了一次
* 60 50 40 30 20 10
*
* 总结规律:
* 6个数比较5趟
* n个数比较n-1趟
*
* 次数:n个数-第几趟数
*/
参考代码:

int [] num=new int[] {3,8,1,5,2,9};
		//从大到小排列
		//外层循环控制趟数
		for(int i=0;i<num.length-1;i++) {
			//内层循环控制次数
			for(int j=0;j<num.length-(i+1);j++) {
			//比较  从大到小用<   从小到大用>
				if(num[j]<num[j+1]) {
					int temp=num[j];
					num[j]=num[j+1];
					num[j+1]=temp;
				}
			}
			
			}
		for(int num1:num) {
			System.out.print(num1+"\t");
		}