1.执行结构
1.1概述
1996年,计算机科学家Bohm和Jacopini证明了:任何简单或复杂的算法都可以由顺序结构、分支结构和循环结构这三种基本结构组合而成。它们的共同点是都包含一个入口和一个出口,它们的每个代码都有机会被执行,不会出现死循环。
1.2分类
顺序结构
顺序结构是一种基本的控制结构,它按照语句出现的顺序执行操作。
分支结构
分支结构又被称为选择结构,根据条件成立与否来执行操作。
循环结构
循环结构是一种重复结构,如果条件成立,它会重复执行某一循环体,直到出现不满足的条件为止。
2.分支结构
2.1if条件语句
if条件结构是根据条件判断之后再做处理。
- if(条件语句){…}
- if(条件语句){…}else{…}
- if(条件语句){…}elseif(条件语句){…}
- if(条件语句){…}elseif(条件语句){…}else{…}
2.2swith语句
switch(表达式)
{
case取值1:语句块1;break;
case取值n:语句块n;break;
default:语句块n+1;break;
}
- 当表达式取值为1/n时执行语句块1/n,直到遇见break,跳出整个大括号,继续执行后面的语句
- 当表达式取值皆不符合case的取值则执行default的语句块n+1,直到遇见break,跳出整个大括号,继续执行后面的语句
- 当表达式取值皆不符合case的取值并且没有default的语句块则跳过switch语句块,继续执行后面的语句
switch语句规则:
-
switch括号内的表达式的返回值必须是下述几种类型之一:int,byte,char,short[以及这4个的包装类],enum(JDK1.5之后),String(JDK1.7之后,但是要求case也是String);
-
case后面的取值必须是常量且所有case后面的取值应是不同的;
-
default、case后面的语句块、break都是可写可不写的;
-
break语句用来在执行完一个case分支后使程序跳出switch语句块;
-
如果case后面没有写break不管case取值是否符合表达式的返回值都会继续下面的case分支执行直到结束或遇见break!
问题:esclipse设置switch/case代码块自动补齐的快捷键
3. 循环语句
3.1概述
在循环条件满足的情况下,反复执行特定代码 。
3.2分类
for循环
while循环
do/while循环
3.3
3.3.1while循环
符合条件,循环继续执行;否则,循环退出。
-
1、分析循环条件和循环操作使用while循环的步骤:
2、套用while语法写出代码
3、检查循环是否能够退出 -
特点:先判断,再执行。
语法:
while(条件表达式) { //语句块; }
3.3.2do-while循环
先执行一遍循环操作,符合条件,循环继续执行;否则,循环退出。
-
特点:先执行,再判断
语法:
do{ 循环操作 }while(条件表达式);
3.3.3for循环
语法:
for(初始化参数;判断条件;更新循环变量){ 循环体; }
- 初始化参数和更新循环变量代码块可以不写
- 判断条件不写会默认是true
3.3.4for-in循环
语法:for(属性变量 in 被遍历的对象){ 要执行的代码块 }
//遍历对象中的属性以及对应的值
var ob = {"name":"张三","age":"22","sex":"男"};
for(key in ob){
document.write(key+":"+ob[key]+"<br/>");
}
//遍历数组中每个值的下标以及对应的值
var a=[10,20,30,40];
for(key in a){
document.write(key+":"+a[key]+"<br/>");
}
3.3.5foreach循环
语法:for(元素类型 元素变量x:遍历对象(数组或集合)){ 引用元素变量x的语句; }
//
forEach的三种用法:
//1.直接forEach遍历
for(int i:list){ System.out.println(i); }
//2.用system.out::println
list.forEach(System.out::println);
//3.有map集合 键值对的情况下
set.forEach((key) -> {
System.out.println(key + "\t"+map.get(key));
});
举例:
**第一种方法测试**
public class GenericEx {
public static void main(String[] args) {
}
@Test
public void test() {
List<Integer> list = new ArrayList<Integer>();
//jdk7版本之后允许不加泛型<Integer>
// List<Integer> list=new ArrayList<>();
list.add(1);// boxing And unboxing
list.add(2);
list.add(3);
list.add(66);
//int j = 3;
//Integer iObj = Integer.valueOf(7);
//int k = j + iObj;// j+iObj.intValue();
//Integer o = j + iObj;// new Integer(j+iObj.intValue());
第一种方法 第二种方法
for(int i:list){ list.forEach(system.out::println);
system.out.println(i);
}
输出结果: 输出结果:
1 1
2 2
3 3
66 66
**第二种方法测试**
@Test
public void testSet() {
Set<String> set = new TreeSet<>();//TreeSet方法是按字典顺序排列(即按首字母顺序排列)
set.add("test");
set.add("hello");
set.add("cc");
set.add("hehe");
set.add("cc");
set.forEach(System.out::println);
}
输出结果:
cc
hehe
hello
test
**第三种方法测试:Map集合有键值对的**
@Test
public void testMap() {
// 键是Integer类型,值是String类型
Map<Integer, String> map = new TreeMap<>();
//Map<Integer, String> map=new TreeMap<==Integer, String==>();
map.put(1, "zhangsan");
map.put(2, "lisi");
map.put(3, "wangwu");
map.put(4, "zhaoliu");
Set<Integer> set = map.keySet();
set = map.keySet();
set.forEach((key) -> {
System.out.println(key + "\t" + map.get(key));
});
输出结果:
1 zhangsan
2 lisi
3 wangwu
4 zhaoliu
删除的话用remove
set.remove(1);
输出结果:
2 lisi
3 wangwu
4 zhaoliu
##以上为forEach的三种用法以及举例,仅供参考
4.经典例题
4.1break与continue区别
4.2如何退出多重循环
break只能跳出当前所在的循环,如果外面有外层循环,需要给外层循环起别名后break:别名;才可跳出多重循环。
public static void main(String[] args) {
haha:for(int i=0;i<10;i++) {
for(int j=0;j<10;j++) {
if(i==5&&j==5) {
break haha;
}
System.out.println("i="+i+",j="+j);
}
}
}
4.3循环嵌套训练
4.3.1图形打印
4.3.2九九乘法表
public static void main(String[] args) {
// 打印九九乘法表
int n;
int m;
int i = 1;
for (n = 1; n < 10; n++) {
for (m = 1; m <= n; m++) {
if (m != i) {
System.out.print(n + "×" + m + "=" + (n * m) + " ");
}
if (m == i) {
System.out.println(n + "×" + m + "=" + (n * m));
i += 1;
}
}
}
}