3.流程控制

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循环

符合条件,循环继续执行;否则,循环退出。

  •  使用while循环的步骤:
    
    1、分析循环条件和循环操作
    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());		
第一种方法								第二种方法												
forint 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;
	                }
	            }
	        }    
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值