目录
1 switch
1.1 if…else
if…else语句来实现,但是由于判断条件比较多,实现起来代码过长,不便于阅读。Java中提供了一种switch语句来实现这种需求.
switch (表达式){
case 目标值1:
执行语句1
break;
case 目标值2:
执行语句2
break;
......
case 目标值n:
执行语句n
break;
default:
执行语句n+1
break;
}
1.2 switch特性: case的穿透性
case 后面的常量,和switch中的数据相同,没有break,一直向下穿透
case 后面没有break。程序就会一直向下穿透
例如:当输入的数字为1、2、3、4、5时就视为工作日,否则就视为休息日
public class SwitchDemo02 {
public static void main(String[] args) {
int week = 2;
switch (week) {
case 1:
case 2:
case 3:
case 4:
case 5:
// 当 week 满足值 1、2、3、4、5 中任意一个时,处理方式相同
System.out.println("今天是工作日");
break;
case 6:
case 7:
// 当 week 满足值 6、7 中任意一个时,处理方式相同
System.out.println("今天是休息日");
break;
}
}
}
2 数组
它是一个用来存储同一个数据类型多个元素的一个容器(数组长度是固定的,数组中存储的元素的数据类型要求一致)
格式:
格式1: 数据类型[] 数组名 = new 数据类型[数组长度]; 如:int[ ] x = new int[100]; 格式2: 数据类型[] 数组名 = new 数据类型[]{元素值1,元素值2,..}; 格式3: 数据类型[] 数组名 = {元素值1,元素值2,..}; |
数组操作的常见问题:
(1)NullPointerException: 空指针异常
1 int[] arr = new int[3]; // 定义一个长度为3的数组
2 arr[0] = 5; // 为数组的第一个元素赋值
3 System.out.println("arr[0]=" + arr[0]); // 访问数组的元素
4 arr = null; // 将变量arr置为null
5 System.out.println("arr[0]=" + arr[0]); // 访问数组的元素
运行结果:
(2)ArrayIndexOutOfBoundsException: 数组越界异常。并且内存地址只能给一次,再给一次无效。
int[] arr = new int[4]; // 定义一个长度为4的数组
System.out.println("arr[0]=" + arr[4]); // 通过角标4访问数组元素
JVM对自己的内存进行了划分,分成5个区域 寄存器:内存和CPU之间 本地方法栈:JVM调用系统中的功能 方法和数据共享:运行时期class文件,进入的地方 方法栈:所有的方法运行的时候,进入的内存 堆:存储的是容器和对象 |
数组的内存图解:
2.1 二维数组
存储的是一维数组内存地址
定义格式:
方法1:int[][] arr = new int[3][4]; 方法2:int[][] arr = new int[3][]; 方法2:int[][] arr = {{1,2},{3,4,5,6},{7,8,9}}; |
例1:二维数组元素遍历与数组元素累加和: 
class ArrayDemo09 {
public static void main(String[] args) {
// 一维数组的求累加和并遍历
int[] arr = { 10, 20, 30, 40, 50 };
int sum = 0;
for (int i = 0; i < arr.length; i++) {
// System.out.println(arr[i]);
sum += arr[i];
}
System.out.println("sum= " + sum);
System.out.println("---------------------");
// 二维数组的求累加和并遍历
int[][] arr2 = { { 1, 2 }, { 3, 4, 5 }, { 6, 7, 8, 9, 10 } };
int sum2 = 0;
for (int i = 0; i < arr2.length; i++) {
for (int j = 0; j < arr2[i].length; j++) {
// System.out.println(arr2[i][j])
sum2 += arr2[i][j];
}
}
System.out.println("sum2= " + sum2);
}
}
public static void main(String[] args) {
// 一维数组的求累加和并遍历
int[] arr = { 10, 20, 30, 40, 50 };
int sum = 0;
for (int i = 0; i < arr.length; i++) {
// System.out.println(arr[i]);
sum += arr[i];
}
System.out.println("sum= " + sum);
System.out.println("---------------------");
// 二维数组的求累加和并遍历
int[][] arr2 = { { 1, 2 }, { 3, 4, 5 }, { 6, 7, 8, 9, 10 } };
int sum2 = 0;
for (int i = 0; i < arr2.length; i++) {
for (int j = 0; j < arr2[i].length; j++) {
// System.out.println(arr2[i][j])
sum2 += arr2[i][j];
}
}
System.out.println("sum2= " + sum2);
}
}
例2:公司销售总和练习:
例如要统计一个公司三个销售小组中每个小组的总销售额以及整个公司的销售额。如下所示
第一小组销售额为{11, 12}万元 第二小组销售额为{21, 22, 23}万元 第三小组销售额为{31, 32, 33, 34}万元。 |
public class ArrayArrayDemo_3 {
public static void main(String[] args) {
//
int[][] arr = { { 11, 12 }, { 21, 22, 23 }, { 31, 32, 33, 34 } };
int sum = 0;
int groupSum = 0;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
groupSum += arr[i][j];
}
System.out.println(groupSum);
sum += groupSum;
groupSum = 0;
}
System.out.println(sum);
}
}
例3:随机点名器:
1.存储全班同学名字 2.打印全班同学每一个人的名字 3.在班级总人数范围内,随机产生一个随机数,查找该随机数所对应的同学名字 |
import java.util.Random;
public class CallName {
public static void main(String[] args) {
// 存储姓名,姓名存储到数组中
// 数组存储姓名,String
String[] names = { "张三", "李四", "王五", "we", "hsaihau" };
// 预览:遍历数组,打印所有姓名
for (int i = 0; i < names.length; i++) {
System.out.println(names[i]);
}
System.out.println("=====================");
Random ran = new Random();
// 随机数,范围0-数组的最大索引
int index = ran.nextInt(names.length);
System.out.println(names[index]);
}
}