4.流程控制与数组

来源:互联网 发布:linux dd seek 编辑:程序博客网 时间:2024/04/29 08:37

1.顺序结构

很简单,就是程序从上到下执行,没有任何判断和跳转;

2.分支结构

1).if条件语句

a.if语句的一个非常需要重视的注意点,就是关于else的含义,其实else 的含义是"否则",其隐含条件是对前面的条件取反;
int age = 45;if(age>20){  System.out.println("x");}else if(age>40){  System.out.println("xx");}else if(age>60){  System.out.println("xxx");}
等价于:
int age = 45;if(age>20){  System.out.println("x");}//在原本的if条件中增加了else的隐含条件if(age>40 && !(age>20)){//相当于age>40 && age<=20,永远不满足  System.out.println("xx");}//在原本的if条件中增加了else的隐含条件,即把前面的条件都取反if(age>60 && !(age>20) && !(age>40 && !(age>20)) ){//相当于age>60 && age<=40,永远不满足  System.out.println("xxx");}
正确写法:
int age = 45;if(age>60){  System.out.println("xxx");}else if(age>40){  System.out.println("xx");}else if(age>20){  System.out.println("x");}
等价于:
int age = 45;if(age>60){  System.out.println("xxx");}//在原本的if条件中增加了else的隐含条件if(age>40 && !(age>60)){//相当于age>40 && age<=60  System.out.println("xx");}//在原本的if条件中增加了else的隐含条件,即把前面的条件都取反if(age>20 && !(age>60) && !(age>40 && !(age>60)) ){//相当于age>20 && age<=40  System.out.println("xxx");}
总结:使用if...else语句时,总是优先把包含范围小的条件放在前面处理,一定要先处理包含范围更小的情况!!!

2).switch语句

a.语法:
String season = "春天";switch (season){  case "春天" :  System.out.println("x");  break;  case "夏天" :  System.out.println("x");  break;  case "秋天" :  System.out.println("x");  break;  case "冬天" :  System.out.println("x");  break;  default:  System.out.println("x");}
b.注意点:
第一:switch的表达式支持类型:byte,short,char,int,String,枚举类型;
第二:case后面一定要加break;

3.循环结构

1).while循环

a.使用while循环时,一定要保证循环条件有变成false 的时候,不然会死循环;

2)do while循环

a.do while循环与while循环的区别:while循环是先判断循环条件,如果条件为true,则执行循环体;而do while是先执行循环体,再判断循环条件,若为true,执行下一次循环,否则终止循环;

3)for循环

for(初始化语句;循环条件;循环迭代语句){  循环体}
a.初始化语句只在循环开始前执行一次;
b.每次执行循环体前,下计算循环条件的值,若为true,则执行循环体;
c.循环体结束后,只需循环迭代语句;
注意点:
a.for循环可以同时制定多个初始化语句,循环条件也可以是一个包含逻辑运算符的表达式;
b.初始化若有多个变量,应该具有相同的数据类型;
c.不要在循环体内修改循环变量(循环计数器),如果要用,可以定义临时变量进行赋值;
d.for循环圆括号里面只有两个分号是必须的,其他都是可以忽略的,但是都忽略的话,就会产生一个死循环;

4)嵌套循环

4.控制循环结构

1).用break结束循环

a.在循环体中遇到break,系统会完全结束该循环,开始执行循环之后的代码;
b.break语句不仅可以结束其所在的循环(不需要标签),还可以直接结束其外层循环(需要标签);
c.标签:一个紧跟冒号":"的标识符
//外层循环,outer作为标识符outer:for(int i=0;i<5;i++){  //内层循环  for(int j=0;j<3;j++){    if(j == 1){      //跳出outer标签所标志的循环      break outer;    }  }}
d.也可以把标签放在break语句所在的循环,但没有意义,因为break默认就是结束其所在的循环;所以,标签必须在break语句所在循环的外层循环之前定义才有意义;

2)用contine忽略本次循环剩下语句

a.continue只是忽略本次循环剩下语句,接着开始下一次循环,并不会终止循环;而break则是完全终止循环本身;
b.所以,如果把continue放在单次循环的最后一行,没有任何意义------因为相当于忽略了一片空白;

3)使用return结束方法

a.直接结束一个方法!

5.数组

1)数组定义

a.所有的数组元素具有相同的数据类型;
b.数组也是一种类型,从这个角度看,数组有无数种类型,因为自定义类都是生成一个对应的数组类型,比如:Person[]类型;
c.既然数组也是一种类型,则定义的时候也是用new的方式:type[] arr = new type[]{xx,xxx,xxxx};

2)定义数组

a.type[] arrayName

3).数组的初始化

a.静态初始化;
int[] intArr = new int[]{1,2,3,4,5};
简化静态初始化:
int[] intArr = {1,2,3,4};

b.动态初始化;
int[] intArr = new int[5];
注意:
执行动态初始化后,制定数组的长度后,系统会为数组元素分配初始值,规则:
数组元素类型是byte,short,int,long > 0
数组元素类型是float,double > 0.0
数组元素类型是char > '\u0000'
数组元素类型是boolean > false
数组元素类型是引用类型 > null

4).使用数组

a.通过数组下标使用;

5).foreach循环

注意:使用foreach时,每个循环变量相当于一个临时变量,系统会把数组元素依次赋给这个临时变量,而这个临时变量并不是数组元素,所以如果希望改变数组元素的值,不能使用foreach循环;因此,不要对foreach的循环变量进行赋值操作;

6.深入数组

1)内存中的数组
2)基本类型数组的初始化
3)引用类型数组的初始化
4)多维数组?

a.理解多维数组:
type[][] arrName:比如int[][],前面已经讲过了,int[]就是一种类型,可以把它当成一个整体,暂时叫A,那"A[]"不就是元素类型是A类型的一个一个一维数组么!
b.初始化多维数组时,可以只指定最左边维的大小也可以一次指定每一维的大小;
int[][] intArr = new int[4][];//同时初始化两个维度int[][] intArr2 = new int[3][4];
c.静态初始化:
Sring[][] str1 = new String[][]{new String[3],new String[]{"hello"}};//简化String[][] str2 = {new String[4],new String[]{"hello"}};

5).工具类Arrays

a.如果a数组和b数组的长度相等,并且数组元素也一一相等,则返回true;
boolean eauals(type[] a,typep[] b)

b.数组元素进行升序排序;
void sort(type[] a);

c.把original数组复制成一个新数组,length是新数组的长度,如果length小于original数组的长度,则新数组是原数组的前length个元素;如果大于,多出来的补充0或0.0或'\u0000'或false或null
type[] copyOf(type[] original,int length):

总结:如果操作数组,可以多使用Arrays工具类;
1 0
原创粉丝点击