常见异常
java.lang.ArrayIndexOutOfBoundsException: 5
at com.neuedu.test.Chap04.test01(Chap04.java:14)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
定义:
数组可以看成是多个相同类型数据的组合,实现对这些数据的统一管理
元素:数组里的每个值叫做一个元素
索引index:是数据在数组里存放的位置 (编号) 索引从0开始
{1,2,3,4,5} 3的索引为2
数组元素类型:可以是任何类型(四类八种基本类型+引用类型)
分类:
一维数组
多维数组
一维数组定义
两种定义方式
1)数组类型 数组名称[]
int a[];
2)数组类型[] 数组名称
int[] b;
给数组指定长度
int a[]=new int[4];
给数组赋值
//第一种,用下标(索引)方式给数组赋值
a[0]=56;
a[1]=45;
a[2]=18;
a[3]=11;
a[4]=9;
学生练习
定义一个长度为5的一维数组,给他赋值 ,并用for循环打印元素值
@Test
public void test1() {
//定义数组的两种方式
int a[]=new int[5];
int[] b=new int[5];
//数组是引用类型 把地址存到栈里,把数据存到堆里
给数组赋值
第一种,用下标方式给数组赋值
a[0]=56;
a[1]=45;
a[2]=18;
a[3]=11;
a[4]=9;
//System.out.println(a[2]);
//得到数组长度
int len=a.length;
//for循环打印数组的每个值
for(int i=0;i System.out.println(a[i]); } } 数组类型 数组名[ ] = {元素1,元素2,…} 数组类型 数组名[ ] = new 数据类型[ ]{元素1,元素2,…} int [] a=new int[]{1,2,3}; int [] a={3,4,5}; 学生练习: 用这种方式改造刚才的程序 格式: for(数组元素类型 循环到的变量命名: 所循环的数组名){ 语句; } 课堂练习 编写一个长度为5的整型数组,每个元素赋值为0-10的随机整数,遍历该数组,输出每个元素。 @Test public void test3(){ int a[]=new int[5]; for(int i=0;i int r=new Random().nextInt(10); a[i]=r; } for(int b:a){ System.out.println(b); } } ArrayIndexOutOfBoundsException 1)线上学习多维数组的创建、初始化、内存模型 2)背冒泡排序 3)今天课堂代码写一下 因为数组有下标,数组的遍历本质上是利用数组的下标,循环下标读取数据。 课堂练习: 学生练习: 1)从键盘输入班级学员成绩,计算全班学员的平均分 2)从键盘输入班级学员成绩,找出全班学员的最高分 System.arraycopy(src, srcPos, dest, destPos, length); //src:从哪里拷 源数组 拷贝谁 //srcPos:从源数组中的第几个下标开始 源数组中的起始位置 //dest:目标数组 //destPos:目标数组中的起始位置 //length:要复制的数组元素的个数 /** * 已知两个一维数组:{1,2,3,4,5}和{6,7,8},将这两个一维数组合并成一个一维数组{1,2,3,4,5,6,7,8}。 */ @Test public void exam04(){ int[] a={1,2,3,4,5}; int b[]={6,7,8}; int c[]=new int[a.length+b.length]; //src源数组从哪里拷 源数组 拷贝谁 //srcPos 起始位置的索引号 //dest 目标数组 //destPos 放到c的起始位置 //length拷贝几个 //把a复制到c里 System.arraycopy(a, 0, c, 0, a.length); //把b复制到c里 System.arraycopy(b, 0, c, a.length, b.length); for(int i=0;i System.out.println(c[i]); } } Arrays.sort(c) 全排 int c[]={4,1,8,9,6,2,1,0}; Arrays.sort(c); for(int i=0;i System.out.println(c[i]); } Arrays.sort(c, fromindex, toindex); 从哪个索引到哪个索引处进行排序,其他的不动。 //从指定位置到终止位置进行排序 Arrays.sort(c, 3, c.length); System.out.println("指定位置排序"); for(int i=0;i System.out.println("---->"+c[i]); } 课堂练习: 1)将一个字符数组的值(neusofteducation)拷贝到另一个字符数组中。(知识点:数组复制) 2 )给定一个有9个整数(1,6,2,3,9,4,5,7,8)的数组,先排序,然后输出排序后的数组的值。 冒泡排序: @Test public void exam06(){ int a[]={3,6,2,8,10,99,55,22,0}; int len=a.length; //循环len-1次 for(int i=1;i //第一次 比较len-1次,得到最大的一个a[0]>a[1]? --》a[1]>a[2]...... //第二次 比较len-2次,得到倒数第二个 for(int j=0;j //如果a[j]>a[j+1]则交换 if(a[j]>a[j+1]){ int temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } //循环打印 for(int item:a){ System.out.println(item); } } 二维数组的创建和遍历 public static void main(String[] args) { //创建并初始化数组 //int[][] a=new int[][]{{1,2,3},{4,5,6}}; int[][] a={{1,2,3},{4,5,6}};第二种创建同时赋值
加强for循环(以后常用)
数组越界异常
作业
数组的遍历
数组复制
数组排序