黑马程序员___Java基础[02-Java基础语法](二)

八、程序流程控制

1、顺序结构:即程序从上往下顺序执行的结构。

2、判断结构:代表语句——if

A:if语句的三种格式:

  • 简单if语句:

if(条件表达式) {

执行语句;

}

  • if……else语句

if(条件表达式) {

执行语句;

}else {

执行语句;

}

  • 嵌套if语句

if(条件表达式) {

执行语句;

}else if (条件表达式) {

执行语句;

}

……

else {

执行语句;

}

注意:1)条件表达式意味着结果为 true 或 false;

  2)花括号中只有一条语句时,花括号可以省略不写;

  3)else只与它上方离它最近的if相匹配。

B:if语句特点:

a、每一种格式都是单条语句。

b、第二种格式与三元运算符的区别,使用三元运算符的

好处:简化 if……else 代码。

弊端:使用出现局限性

   1) if……else可以有多条语句执行;

   2)三元运算符运算完要有值出现,既表达式中不能有输出语句(空类型);

   3)三元运算符可能会可能涉及到数据类型提升。

c、条件表达式无论写成什么样子,只看最终的结构是否是 true 或者 false;

d、一旦条件表达式结果为 true ,执行完相应花括号中的语句,整个语句就结束,不再往下判断。

C:if结构的应用

 1         if(n>1)
 2             System.out.println("a");
 3         else if(n>2)
 4             System.out.println("b");
 5         else if(n>3)
 6             System.out.println("c");
 7         else
 8             System.out.println("d");
 9         System.out.println("—————————————————————————");
10         if(n>1)
11             System.out.println("a");
12         if(n>2)
13             System.out.println("b");
14         if(n>3)
15             System.out.println("c");
16         else
17             System.out.println("d");
View Code

执行结果:横线上是a;横线下是a b d

结果分析:

横线上是if语句的第三种形式,多重判断,只要有条件表达式为 true ,执行完相应花括号中的语句,整个语句就结束。

横线下是两个简单if语句和一个if……else语句,当花括号省略时,if只能控制一条语句。

3、选择结构

A:switch语句格式:代表语句 switch

switch(表达式) {

case 取值1:

执行语句;

break;

case 取值2:

执行语句;

break;

…...

default:

执行语句;

break;

}

B:switch语句特点:

  • a、switch语句表达式的类型(即case的匹配类型)只有六种:byte、short、int 、char、String(jdk7.0新增)、枚举(jdk5.0新增)。

  • b、switch的表达式中的变量需在switch外声明,case中的取值1、2、3等都是常量表达式,不能有变量,且常量表达式的运算结果必须在以上六种类型内。

  • c、case语句是顺序检测的,这些case和default在书写上是没有顺序的,先从匹配的case执行,没有匹配的case才检测default(不管default写在哪)。

  • d、结束switch语句的两种情况:遇到break;执行到switch语句结束(检测顺序:case->default)。

  • e、关键字break是可选的;默认情况default是可选的。

  • f、如果匹配的case或者default没有对应的break,那么程序会继续执行下个case里的执行语句,不会再对case值进行判断,直到遇到break或者switch结尾结束。应用于当几个case里的值所要执行的语句都一样的时候,我们可以不写break。

   例如:我们做一年有四季的例子:

 1 int month = 4;
 2     switch (month){
 3     case 3:
 4     case 4:
 5     case 5:
 6         System.out.println(month+"月是春季");
 7     break;
 8     case 6:
 9     case 7:
10     case 8:
11         System.out.println(month+"月是夏季");
12     break;
13     case 9:
14     case 10:
15     case 11:
16         System.out.println(month+"月是秋季");
17     break;
18     case 12:
19     case 1:
20     case 2:
21         System.out.println(month+"月是冬季");
22     break;
23     default:
24         System.out.println(month+"月没有这样的月份")
25     
26     }//上述例子就是三个case里面的值输出都一样的,所以我们省略了break;这样会少写几行代码,提高效率
View Code

C:if和switch语句的使用选择

if和switch语句很像,具体什么场景下,应用哪个语句呢?

  • 如果判断的具体数值不多,而且符合byte、short、int 、char、String、enum这六种类型。虽然两个语句都可以使用,建议使用swtich语句。因为效率稍高。

  • 其他情况:对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广。

4、循环结构

A:while语句格式:

while(条件表达式) {

循环体;

}

B:do……while语句格式:

do {

循环体;

}while(条件表达式);

注意:执行语句中要包含控制循环次数的语句,可使循环结束。do……while语句后有个分号,而while不用。

C:for语句格式:

for(初始化表达式;循环条件表达式;循环后的操作表达式) {

循环体;

}

注意

1)循环条件表达式结果必须为boolean型(for循环中省略不写默认为true);

2)for中的三个表达式可以是多个表达式,这时表达式间要用逗号隔开。

D:三者的联系与区别

a、while和do while的区别:

do……while语句会先执行循环体,再去判断条件,也就是说无论条件是否满足,它都至少要执行一次循环体,先执行,再判断。

while 先判断条件,只要条件不满足就不再执行循环体了,先判断,再执行

b、for里面的连个表达式运行的顺序:

初始化表达式只读一次,判断循环条件,为真就执行循环体,然后再执行循环后的操作表达式,接着继续判断循环条件,重复这个过程,直到条件不满足为止。

c、while和do while的区别:

while与for可以互换,区别在于for为了循环而定义的变量,在for循环结束就会在内存中释放;而while循环使用的变量在循环结束后还可以继续使用。

所以,如果只为循环而使用的变量,用for循环更合适,节省内存空间;如果是语句结束后还要继续使用变量,用while。

d、最简单无限循环格式:while(true){} 、 for(;;){}、无限循环存在的原因是并不知道循环多少次,而是根据某些条件,来控制循环。 

e、循环之间可以嵌套。

5、其他流程控制语句

A:break(跳出),  continue(继续)

应用范围:

break语句:选择结构(switch)和循环结构(for和while)。

continue语句:应用于循环结构(for和while)。

B:特点

a、这两个语句离开应用范围,存在是没有意义的。

b、这个两个语句单独存在下面都不可以有语句,因为执行不到。

c、continue语句是结束本次循环继续下次循环;多配合if语句和标号使用。

d、标号的出现,可以让这两个语句作用于指定的范围。

 1 class BiaoHaoDemo {
 2     public static void main(String[] args) {
 3         //break:
 4         w:for(int x=0; x<3; x++) {
 5             for(int y=0; y<4; y++) {
 6                 System.out.println("x="+x);
 7                 break w;
 8             }                
 9         }
10 
11         //continue:只能作用于循环结构。特点:结束本次循环,继续下一次循环。
12         for(int x=1; x<=10; x++) {
13             if(x%2==1)
14                 continue;
15             System.out.println("x="+x);
16             
17         }
18 
19         w:for(int x=0; x<3; x++) {
20             for(int y=0; y<4; y++) {
21                 System.out.println("x="+x);
22                 continue w;
23             }                
24         }
25 
26         /*
27         记住:
28         1,break和continue语句作用的范围。
29         2,break和continue单独存在时,下面不可以有任何语句。因为都执行不到。
30         */
31     }
32 }
View Code

6、实例练习

A:累加思想

原理:通过变量记录住每次变化的结果;通过循环的形式,进行累加动作。

 1 /*
 2  1,获取1~10的和,并打印。
 3 */ 
 4 class  ForTest2 {
 5     public static void main(String[] args) {
 6         //1,定义变量用于存储不断变化的和。
 7         int sum = 0;
 8         //2,定义变量,记录住不断变化的被加的数。
 9         int x = 1;
10         //3,定义循环,重复加法的过程。
11         while(x<=10) {
12             sum = sum + x;
13             x++;
14         }
15         System.out.println("sum="+sum);
16         /*
17          循环注意:
18          一定要明确哪些语句需要参与循环,哪些不需要。
19         */
20          
21         /*
22          其实这就是累加思想。
23          原理:通过变量记录住每次变化的结果。
24          通过循环的形式。进行累加动作。
25         */
26     }
27 }
View Code

B:计数器思想

原理:通过一个变量记录住数据的状态变化;也是通过循环完成。

 1 /*
 2  2,1~100之间 7的倍数的个数。并打印。
 3  思路:
 4  1,先对1~100进行循环(遍历)通过循环的形式。
 5  2,在遍历的过程中,定义条件。只对7的倍数进行操作。
 6  3,因为7的倍数不确定,只要符合条件,就通过一个变量来记录住这个变化的次数。
 7  
 8  步骤:
 9  1,定义循环语句,选择for语句。
10  2,在循环中定义判断。只要是7的倍数即可。使用if语句。条件:7的倍数 x%7==0;
11  3,定义变量,该变量随着7的倍数的出现而自增。
12 */
13 class  ForTest3 {
14     public static void main(String[] args) {
15         int count = 0;
16         for(int x=1; x<=100; x++) {
17             if(x%7==0)
18                 //System.out.println("x="+x);
19                 count++;
20         }
21         System.out.println("count="+count);
22  
23         /*
24          计数器思想。
25          通过一个变量记录住数据的状态变化。
26          也许通过循环完成。
27         */
28     }
29  }
View Code

C:for循环嵌套

特点:外循环控制行数;内循环控制每一行的列数,也就是一行中元素的个数。

 1 /*
 2   九九乘法表
 3     1*1=1
 4     1*2=2 2*2=4
 5     1*3=3 2*3=6 3*3=9
 6     ……
 7 */
 8 class  ForForTest {
 9     public static void main(String[] args) {
10         for (int x=1; x<=9 ; x++) {
11             for (int y=1; y<=x; y++) {
12                 System.out.print(y+"*"+x+"="+y*x+"\t");
13             }
14             System.out.println();
15         }
16     }
17 }
View Code
 1 class BiaoHaoDemo {
 2     public static void main(String[] args) {
 3         //break:
 4         w:for(int x=0; x<3; x++) {
 5             for(int y=0; y<4; y++) {
 6                 System.out.println("x="+x);
 7                 break w;
 8             }                
 9         }
10 
11         //continue:只能作用于循环结构。特点:结束本次循环,继续下一次循环。
12         for(int x=1; x<=10; x++) {
13             if(x%2==1)
14                 continue;
15             System.out.println("x="+x);
16             
17         }
18 
19         w:for(int x=0; x<3; x++) {
20             for(int y=0; y<4; y++) {
21                 System.out.println("x="+x);
22                 continue w;
23             }                
24         }
25 
26         /*
27         记住:
28         1,break和continue语句作用的范围。
29         2,break和continue单独存在时,下面不可以有任何语句。因为都执行不到。
30         */
31     }
32 }
View Code

7、语句的最后总结

(1)什么时候用变量? 当数据不确定的时候,就定义变量来存储数据。

(2)什么情况下,使用哪个语句?

A:当对某几个值进行判断的时候,可以使用if语句,或者switch语句,建议使用switch。

     但是,使用switch要注意,它只能操作六种类型的值,byte,short,int,char,String,枚举。

     如果是六种以外的值,需要使用if。

B:如果对数据区间进行判断,或者对运算结果是boolean类型的进行判断,用if语句。

C:当需要某些语句执行很多次的时候,使用循环结构。如果定义变量只为循环增量存在时,可以使用for语句。

     如果对一个条件进行一次判断使用if,如果对该条件进行多次判断,使用while

D:如果要结束循环,可以控制循环条件,或者通过break语句完成。

     如果要控制循环的流程,是否该继续执行,可以通过continue或者break来完成。

E:break结束当前所在循环;continue结束本次循环,进入下一次循环。

九、函数

1、函数的定义

A:什么是函数?

函数就是定义在类中的具有特定功能的一段独立小程序。

函数也称为方法。

B:函数的格式:

修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,……) {

执行语句;

return 返回值;

}

C:格式注解:

  • 修饰符:public static等

  • 返回值类型:函数运行后需要返回的结果的数据类型。

  • 函数名:为了方便使用这个函数,给它起个名字,这个名字要符合标识符命名规则;作用是体现函数功能。

  • 参数类型:是形式参数的数据类型。

  • 形式参数:是一个变量,用于存储调用函数时传递给函数的实际参数。

  • 实际参数:传递给形式参数的具体数值。

  • return:用于将结果返回给函数调用者,并结束函数。

  • 返回值:需要返回给调用者的值。

2、函数的特点

A:定义函数的好处

定义函数可以将功能代码进行封装,便于对该功能进行复用

函数的出现提高了代码的复用性

B:函数的特点

函数(主函数除外)只有被调用才会被执行

对于函数没有具体返回值的情况,返回值类型用关键字void表示,此时该函数中的return语句如果在最后一行可以省略不写。

C:注意事项

函数中只能调用函数,不可以在函数内部定义函数。

定义函数时,函数的结果应该返回给调用者,交由调用者处理。

定义的函数最好只完成某一个功能,不要赋予一个函数太多功能,因为函数是对特定功能的封装。

3、函数的应用

A:两个明确

明确要定义的功能最后的结果:返回值类型

明确在定义该功能的过程中是否需要未知内容参与运算,明确未知内容的类型和个数:参数列表

B:示例

需求:定义一个功能,可以实现两个整数的加法运算。

分析:

该功能的运算结果是什么?两个数的和,也是一个整数(int)

在实现该功能的过程中是否有未知内容参与运算?加数和被加数是不确定的(两个参数int,int)

代码:

int  getSum(int x,int y) {

return x+y;

}

4、函数的重载

A:重载的概念:函数名相同,参数列表不同。

参数类型不同:int add(int i)void;add(double d)

参数个数不同:add(int a,int b);add(int a,int b,int c)

参数顺序不同:print(String name, int age);print(int age,String name)

注:参数顺序不同的重载是可以存在的,但是没有什么实际意义

B:重载的特点:与返回值类型无关,只看参数列表。

C:重载的好处:方便于阅读,优化了程序设计。

D:什么时候用重载:

当定义的功能相同,但参与运算的未知内容不同时,此时就定义一个名称以表示其功能,而通过参数列表的不同来区分多个同名函数。

E:重载示例:

a、返回两个整数的和

int add(int x,int y){return x+y;}

b、返回三个整数的和

int add(int x,int y,int z){return x+y+z;}

c、返回两个小数的和

double add(double x,double y){return x+y;}

F:总结:

主函数的主要功能其实是调用函数:所以尽量将功能封装成函数,然后交由主函数去调用。

一个类中不允许出现函数名和参数列表相同,但返回值不同的函数(虚拟机会不知道该返回哪个函数的结果)。

posted on 2014-01-15 17:42  毛线球球  阅读(224)  评论(0编辑  收藏  举报

导航