控制结构和数组
Posted Al_tair
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了控制结构和数组相关的知识,希望对你有一定的参考价值。
大家好呀!我是小笙!前几天被培训班的老师考察基础,发现漏洞还是有很多的,我想进一步学习java基础,所以我跟着韩老师学Java,以下是我的笔记
控制结构
控制循环类型
-
顺序控制:程序从上到下逐行地执行,中间没有跳转和任何判断
-
分支控制:if - else 判断
// 单分支 if(条件表达式) 执行语句; // 双分支 if(条件表达式) 执行语句; else 执行语句; // 多分支 if(条件表达式) 执行语句; else if(条件表达式) 执行语句; else
-
嵌套分支:在一个分支结构中嵌套另一层分支结构(最好不要超过三层)
-
switch分支结构
switch(表达式) // 表达式有具体的值 case 常量 1:语句一; // 表达式代表一个具体值,常量1与该值进行比较,相同则运行语句一 break; // 退出switch循环,否则直接进行语句2的运行(无需比较常量2) case 常量2:语句二; // 表达式代表一个具体值,常量2与该值进行比较,相同则运行语句二 break; .... default: 最后一个语句; // 当不等于所有常量,则默认执行default语句
细节注意:
- 表达式的数据类型必须和常量的数据类型必须相同 或者 可以自动转换的数据类型(常量的数据类型范围要比表达式的数据类型大)
- 表达式中具体值和常量的数据类型只能是(byte,short,int,char,enum,String)中的其中一个
- default关键字是可选择的(不是强制要求添加)
-
for循环控制 && while循环控制 && do…while循环语句
// 基本语法 for(循环变量初始化;循环条件;循环变量的变化) 循环操作(可以多条语句); 运行顺序: 循环变量初始化 --> [ 循环条件 --> 循环操作 --> 循环条件的变化 ] // 等价于while x 循环变量初始化; while(循环条件) 循环操作(可以多条语句); 循环变量的变化; // 等价于do...while 先执行后判断 循环变量初始化; do 循环操作(可以多条语句); 循环变量的变化; while(循环条件);
中断控制流程语句
break语句
概念:用于退出当前循环
// 不带标签的语句
for(int i = 0;i < 10;i++)
for(int j = 0;j < 10;j++)
break; // 默认中断当下循环
// 带有标签的语句(格式: 标签名自定义 + :)
label1:
for(int i = 0;i < 10;i++)
label2:
for(int j = 0;j < 10;j++)
break label1; // 中断标签1的循环
// switch 中断语句
switch(表达式) // 表达式有具体的值
case 常量 1:语句一; // 表达式代表一个具体值,常量1与该值进行比较,相同则运行语句一
break; // 退出switch循环,否则直接进行语句2的运行(无需比较常量2)
case 常量2:语句二; // 表达式代表一个具体值,常量2与该值进行比较,相同则运行语句二
break;
....
default: 最后一个语句; // 当不等于所有常量,则默认执行default语句
continue语句
概念:结束本次循环,继续进行下一次循环
// 不带标签的语句
for(int i = 0;i < 10;i++)
for(int j = 0;j < 10;j++)
continue; // 默认结束本次循环,而非退出循环,注意和break的区别
// 带有标签的语句(格式: 标签名自定义 + :)
label1:
for(int i = 0;i < 10;i++)
label2:
for(int j = 0;j < 10;j++)
continue label1; // 结束label1的本次循环,跳转到label标签匹配的循环首部
return语句
概念:表示跳出当前所在的方法,如果该方法是main主方法,则相当于结束程序
break 和 continue 必须使用在 loop 或者 switch中,而return可以用在方法的任何位置
相关面试题
本章考验的部分一般在算法题
在JAVA 中,如何跳出当前的多重嵌套循环?【基础】
答:在最外层循环前加label 标识,然后用break:label 方法即可跳出多重循环。
swtich 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上? 【基础】
答:switch(expr)中,可以传递给switch 和case语句的参数应该是int、short、char 或者byte。long不能作用于swtich,String能作用于switch上(java7以后支持)
continue、break 和 return 的区别是什么?
- continue :指跳出当前的这一次循环,继续下一次循环。
- break :指跳出整个循环体,继续执行循环下面的语句。
- return : 用于跳出所在方法,结束该方法的运行。return 一般有两种用法:
return;
:直接使用 return 结束方法执行,用于没有返回值函数的方法return value;
:return 一个特定值,用于有返回值函数的方法
数组
一维数组
数组是引用数据类型,可以存放多个同一类型的数据,引用数据类型有默认初始值
数组的创建
// 先声明后初始化
// 声明数组名
int[] a; // 定义数组数据类型 和 数组名
或者
int a[]; // 推荐使用上面的形式 简洁明了
// 初始化数组
a = new int[5]; // 5 指的是数组长度(a.length)
// 声明 + 初始化
int[] b = new int[5]; // 5 指的是数组长度(a.length)
// 通过下标/索引 [0,array.length)来访问数组值 如:a[1]指的是第二个数组
// 静态初始化 存入数组值
int[] c = 2,3,4,5,6; // 最后一个值后面的逗号可加可不加
注意细节
-
数组创建后有默认初始值
数据类型 byte short char int long float double boolean String 初始值 0 0 \\u0000 0 0 0.0 0.0 false null -
数组范围,我用开区间表示:【0,array.length)
值传递和引用传递的区别
数组拷贝 != 数组赋值(引用传递)
// Arrays方法
int[] a = 1,2,3;
int[] b = Arrays.copyOf(a,a.length)
// 遍历赋值
int[] a = 1,2,3;
int[] b = new int[a.length];
for(int i = 0;i < a.length;i++)
b
二维数组
数组的创建
// 先声明后初始化
// 声明方式
int[][] a; int[] a[]; int a[][];
int[] x,y[]; // x 是一维数组 y 是二维数组
// 初始化二维数组
a[n] new int[5]; //n 的取值范围 [0,5) ,表示的是某一行的一维数组元素
// 动态初始化
int[][] twoArray = new int[5][]; // 5个一维数组,每个一维数组元素可以不相同
int[][] twoArray = new int[5][5]; // 5*5的二维数组
twoArray.length; // 二维数组的行数(二维数组元素个数)
twoArray[n].length; // n 的取值范围 [0,twoArray.length) ,表示的是某一行的一维数组元素
// 静态初始化
// 每个二维数组的每行元素并不一定相等
int[][] a = 1,2,3,4,5,6,,1,2,3;
for (int i = 0; i < a.length; i++)
for (int j = 0; j < a[i].length; j++)
System.out.print("\\t"+a[i][j]);
System.out.println();
1 2
3 4 5 6
1 2 3
二维数组的内存图分析
易错题
相关面试题
请你解释什么是值传递和引用传递?
考察点:JAVA引用传递
答:值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量.
引用传递一般是对于对象型变量而言的,传递的是该对象地址的一个副本, 并不是原对象本身 。 所以对引用对象进行操作会同时改变原对象.
杨辉三角实现(二维数组习题)
final int N = 10;
int[][] array = new int[N][];
for (int i = 0; i < N; i++)
array[i] = new int[i+1];
for (int j = 0; j <= i; j++)
if(j == 0 || j == i)
array[i][j] = 1;
else
array[i][j] = array [i-1][j] + array[i-1][j-1];
for (int i = 0; i < array.length; i++)
for (int j = 0; j < array[i].length; j++)
System.out.print(array[i][j]+" ");
System.out.println();
// 实现效果
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
以上是关于控制结构和数组的主要内容,如果未能解决你的问题,请参考以下文章