1、选择语句switch
①格式:
switch(表达式){
case 常量1:
要执行的语句;
break;
case 常量2:
要执行的语句;
break;
case 常量3:
要执行的语句;
break;
default:
要执行的语句
break;
}
执行流程:表达式和case后面的常量进行比较,和哪个case后的常量相同就执行哪个case后面的程序,遇到break,就全结束。
switch语句中的表达式的数据类型是有要求的。jdk1.7 数据类型接受byte、short、int、char、enum(枚举)、String(1.7新增)。
1 public class SwitchDemo{ 2 public static void main(String args[]){ 3 int week=6; 4 switch(week){ 5 case 1: 6 System.out.println("星期一"); 7 break; 8 9 case 2: 10 System.out.println("星期二"); 11 break; 12 13 case 3: 14 System.out.println("星期三"); 15 break; 16 17 case 4: 18 System.out.println("星期四"); 19 break; 20 21 case 5: 22 System.out.println("星期五"); 23 break; 24 25 case 6: 26 System.out.println("星期六"); 27 break; 28 29 case 7: 30 System.out.println("星期七"); 31 break; 32 33 default: 34 System.out.println("星期不存在!"); 35 } 36 } 37 }
运行结果:
②case穿透
switch特性:case穿透
case后面没有break,程序就会一直向下穿透;
当case后面的常量和switch中数据相同,没有break,一直向下穿透。
1 public class SwitchDemo_1{ 2 public static void main(String args[]){ 3 int week=5; 4 switch(week){ 5 case 1: 6 case 2: 7 case 3: 8 case 4: 9 case 5: 10 System.out.println("工作日!"); 11 break; 12 13 case 6: 14 case 7: 15 System.out.println("休息日!"); 16 break; 17 18 default: 19 System.out.println("星期不存在!"); 20 } 21 } 22 }
运行结果:
2、数组
(一)
①数组的定义一:
数据过多,定义变量代码重复多,写很麻烦,数据多了存数组。
格式:
数据类型 [ ] 数组名 =new 数据类型 [存储元素的个数];
元素个数就是数组中可以存储多少个数据(恒定,定长)
JVM对自己的内存进行了划分,分成5个区域:
(1)寄存器:内存和CPU之间;
(2)本地方法栈:JVM调用了系统中的功能;
(3)方法和数据共享:运行时期class文件进入的地方;
(4)方法栈:所有的方法运行的时候进入的地方;
(5)堆:存储的是容器和对象。
arr引用类型,保存的数据实质上是内存中的地址
1 public static void main(String args[]){ 2 int[] arr=new int[3];//该数组可以存储三个元素 3 System.out.println(arr); 4 }
运行结果:
数组的定义二:
数据类型[ ] 变量名 =new 数据类型[ ]{元素1,元素2,元素3} ;
注意事项:new 后面的中括号中不允许写任何内容,写了就编译失败。
1 public class ArrayDemo_2{ 2 public static void main(String args[]){ 3 //定义数组的同时对元素进行赋值 4 int[] arr=new int[] {1,2,3,4,5,7}; 5 System.out.println(arr.length); 6 System.out.println(arr[5]); 7 } 8 }
运行结果:
数组的定义三:
数据类型[ ] 变量名={元素1,元素2,元素3};
1 public class ArrayDemo_2{ 2 public static void main(String args[]){ 3 //定义数组的同时对元素进行赋值 4 int[] arr=new int[] {1,2,3,4,5,7}; 5 System.out.println(arr.length); 6 System.out.println(arr[5]); 7 System.out.println("------------------------------------------"); 8 9 //直接大括号赋值,定义数组 10 int[] arr2={0,2,4,6,8}; 11 System.out.println(arr2.length); 12 System.out.println(arr2[1]); 13 } 14 }
运行结果:
②使用索引访问数组的元素
数组是一个容器,:存储到数组中的每个元素都有自己的编号,自动编号:最小值是0,最大值是长度-1;
索引(index)、下标、角标;
访问数组存储的元素,必须依赖索引,公式:数组名[索引]
1 public class ArrayDemo{ 2 public static void main(String args[]){ 3 int[] arr=new int[3];//该数组可以存储三个元素 4 System.out.println(arr); 5 6 //通过索引的方式,访问数组中的三个元素 7 System.out.println(arr[0]);//第一个 8 System.out.println(arr[1]);//第二个 9 System.out.println(arr[2]);//第三个 10 } 11 }
运行结果:
③数组的length属性
数组的length属性,就是数组的长度;
公式:数组名.length
· 数组的最小索引是0,最大索引数组.length-1;
1 public class ArrayDemo_1{ 2 public static void main(String args[]){ 3 int[] arr=new int[3];//该数组可以存储三个元素 4 System.out.println(arr); 5 6 //通过索引的方式,访问数组中的三个元素 7 System.out.println(arr[0]);//第一个 8 System.out.println(arr[1]);//第二个 9 System.out.println(arr[2]);//第三个 10 11 System.out.println("数组的长度"+arr.length); 12 } 13 }
运行结果:
④为数组的元素赋值
1 public class ArrayDemo_3{ 2 public static void main(String args[]){ 3 int[] arr=new int[5]; 4 //将1索引上的元素赋值3 5 arr[1]=3; 6 System.out.println(arr[1]); 7 } 8 }
运行结果:
⑤数组的遍历
通过索引的方式将数组中的每个元素分别获取出来;
依赖索引,规律从0开始,一直在自动增长,到达length-1
使用循环实现:
for 知道循环次数,计数器思想;
while 不确定次数。
1 public class ArrayDemo_4{ 2 public static void main(String args[]){ 3 int[] arr={2,4,6,8,10}; 4 //数组遍历 5 for(int i=0;i<arr.length;i++){//或者写成i<=arr.length-1 6 System.out.println(arr[i]); 7 } 8 } 9 }
运行结果:
⑥数组中常见的异常
(1)数组的越界异常 java.lang.ArrayIndexOutOfBoundsException: 3
超过最大索引或者写成负数
1 public class ArrayDemo_4{ 2 public static void main(String args[]){ 3 int[] arr={2,4,6}; 4 //数组的越界异常 5 System.out.println(arr[3]); 6 } 7 }
运行结果:
(2)空指针异常 java.lang.NullPointerException
1 public class ArrayDemo_4{ 2 public static void main(String args[]){ 3 //int[] arr={2,4,6}; 4 //数组的越界异常 5 //System.out.println(arr[3]); 6 7 //空指针异常 8 int[] arr2={1,3,5}; 9 System.out.println(arr2[2]); 10 arr2=null; 11 System.out.println(arr2[3]); 12 } 13 }
运行结果:
⑦数组获取最值
找出数组中的最大值
(1)定义变量,保存数组中,0索引上的元素;int max=arr[0];
(2)max和数组中其他元素进行比较
数组遍历
max比其他索引上的元素小,max记录下较大的数
(3)数组遍历完成后,max记录的就是数组的最大值
1 public class ArrayDemo_5{ 2 public static void main(String args[]){ 3 int [] arr={2,3,5,8,6,2}; 4 //定义变量记录数组中0索引上的元素 5 int max=arr[0]; 6 //遍历数组,获取所有的元素和变量max比较 7 for(int i=1;i<arr.length;i++){ 8 //变量max和数组中的每个元素进行比较 9 if(max<arr[i]){ 10 max=arr[i]; 11 } 12 } 13 System.out.println(max); 14 } 15 }
运行结果:
3、二维数组
①二维数组的定义
数组中的数组,数组里面存储的还是数组;
定义方式和一维数组很相似;
第一种方式:
int[ ] [ ] arr=new [3][4];
其中,[3]表示二维数组中,有三个一维数组;[4]表示三个一维数组中,每个数组的长度是4
1 public class ArrayArrayDemo{ 2 public static void main(String args[]){ 3 int [] [] arr=new int[3][4]; 4 System.out.println(arr); 5 System.out.println(arr[1]); 6 System.out.println(arr[2][3]); 7 } 8 }
第二种方式:
int[ ] [ ] arr=new [3][ ];
二维数组中定义三个一维数组,每个一维数组长度没有指定,必须要new。
arr[0]=new int[5];
arr[1]=new int[4];
第三种方式:
int[ ] [ ] arr={{1,4},{3,5,8},{0,9,8}};
②二维数组的访问
1 public class ArrayArrayDemo_1{ 2 public static void main(String args[]){ 3 int[] [] arr={{1,2,3},{4,5},{6,7,8,9},{0}}; 4 System.out.println(arr[2][1]);//打印7 5 System.out.println(arr[3][0]);//打印0 6 } 7 }
运行结果:
③二维数组的遍历
遍历:for循环,遍历二维数组;遍历过程中,for遍历一维数组。
1 public class ArrayArrayDemo_2{ 2 public static void main(String args[]){ 3 int[] [] arr={{1,2,3},{4,5},{6,7,8,9},{0}}; 4 //外循环,遍历二维数组 5 for(int i=0;i<arr.length;i++){ 6 //内循环,遍历每个一维数组 7 for(int j=0;j<arr[i].length;j++){ 8 System.out.print(arr[i][j]); 9 } 10 System.out.println();//换行 11 } 12 } 13 }
运行结果:
二维数组求和
1 public class ArrayArrayDemo_3{ 2 public static void main(String args[]){ 3 int[] [] arr={{1,2,3},{4,5},{6,7,8,9},{0}}; 4 int sum=0; 5 //外循环,遍历二维数组 6 for(int i=0;i<arr.length;i++){ 7 //内循环,遍历每个一维数组 8 for(int j=0;j<arr[i].length;j++){ 9 sum +=arr[i][j]; 10 } 11 } 12 System.out.println(sum); 13 } 14 }
运行结果:
4、公司销售综合练习
第一个小组销售额为{11,22}万元;
第二个小组的销售额为{21,22,23}万元;
第三个小组的销售额为{31,32,33,34}万元.
求和:每个小组求和
所有小组求和
1 public class ArrayArrayDemo_4{ 2 public static void main(String args[]){ 3 int[] [] arr={{11,12},{21,22,23},{31,32,33,34}}; 4 int sum=0;//所有元素的求和 5 int groupSum=0;//每个一维数组的求和 6 for(int i=0;i<arr.length;i++){ 7 //内循环,遍历每个一维数组 8 for(int j=0;j<arr[i].length;j++){ 9 //一维数组求和 10 groupSum +=arr[i][j]; 11 } 12 System.out.println("第"+(i+1)+"小组销售额为:"+groupSum); 13 sum+=groupSum; 14 groupSum=0; 15 } 16 System.out.println("总销售额:"+sum); 17 } 18 }
运行结果:
5、随机点名器
需求分析:
1、存储全班同学的姓名
2、预览所有人的姓名
3、随机出一个人的姓名
1 import java.util.Random; 2 public class CallName{ 3 public static void main(String args[]){ 4 //存储名字到数组中 5 String [] names={"张三","李四","王五","李六","赵七"}; 6 //预览:遍历数组,打印所有姓名 7 for(int i=0;i<names.length;i++){ 8 System.out.println(names[i]); 9 } 10 System.out.println("------------------------------"); 11 //随机出一个人的名字 12 Random ran=new Random(); 13 //随机数,范围必须是0-数组的最大索引 14 int index=ran.nextInt(names.length);//index 就是随机数,作为索引 15 System.out.println(names[index]); 16 } 17 }
运行结果: