栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JAVA: 第六章 控制语句

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JAVA: 第六章 控制语句

第六章 控制语句

1、怎么接受用户键盘输入?

java.util.Scanner s = new java.util.Scanner(System.in);

// 接收整数

int i = s.nextInt();

// 接收字符串

String str = s.next();

2、控制语句

2.1、控制语句的出现可以让我们的程序具有逻辑性/条理性,可以使用控制语句来实现一个“业务”了

2.2、控制语句包括几类?

3类:

选择语句:if、switch

循环语句:for、while、do…while…

转向语句:break、continue、return

2.3、选择语句也可以叫做分支语句

if语句

switch语句

2.4、循环语句:主要循环反复的去执行某段特定的代码块

for循环

while循环

do... while....循环

2.5、转向语句

break

conitune

return(这个目前先不需要学习,后面讲方法的时候会使用)

3、选择语句/分支语句if

if语句的语法结构和运行原理?

if语句是分支语句,也可以叫做条件语句。

if语句的语法格式:

①第一种写法:

if(布尔表达式){

java语句;

java语句;

}

这里的一个大括号{}叫做一个分支。

if这个单词翻译为如果,所以又叫做条件语句。

该语法的执行原理是:

如果布尔表达式的结果是true,则执行大括号中的程序,否则大括号中代码不执行。

②第二种写法:

 

if(布尔表达式){ // 分支1

java语句;

}else{  //分支2

java语句;

}

 

执行原理:如果布尔表达式的结果是true,则执行分支1,分支2不执行。如果布尔表达式的结果是false,分支1不执行,执行分支2

以上的这个语句可以保证一定会有一个分支执行。

③第三种写法

if(布尔表达式1){ //分支1

java语句1;

}else if(布尔表达式2){ //分支2

java语句2;

}else if(布尔表达式3){

java语句3;

}else if(布尔表达式4){

java语句4;

}.....

以上if语句的执行原理?

先判断“布尔表达式1”,如果“布尔表达式1”为true,则执行分支1,然后if语句结束了。

当“布尔表达式1”的结果为false,那么会继续判断布尔表达式2的结果,如果布尔表达式2的结果为true,则执行分支2,然后整个if就结束了。以此类推.......

从上往下依次判断,主要看第一个true发生在哪个分支上。第一个true对应的分支执行,只要一个分支执行,整个if结束

④第四种写法

if(布尔表达式1){ //分支1

java语句1;

}else if(布尔表达式2){ //分支2

java语句2;

}else if(布尔表达式3){

java语句3;

}else if(布尔表达式4){

java语句4;

}else{

java语句; //以上条件没一个成立的,这个else就执行了

}

这个和第三种的区别是,如果else if的所有结果全为false,则执行else后面的语句

 

嵌套

if(){

     if(){

     }else{

     }

     }else{

}

原理:套娃

注意:

1、对于if语句来说,在任何情况下只能有一个分支执行,不可能存在2个或者更多个分支执行。if语句中只要有一个分支执行了,整个if语句就结束了。(对于一个完整的if语句来说的。)

2、以上四种语法机制中,凡是带有else分支的(不是else if),一定可以保证会有一个分支执行。以上4种当中,第一种和第三种没有else分支,这样的语句可能会导致最后一个分支都不执行。第二种和第四种肯定会有一个分支执行

3、当分支当中“java语句;”只有一条,那么大括号{}可以省略,但为了可读性,还是加上好。(有的程序员故意省略,你要看懂)

4、控制语句和控制语句之间是可以嵌套的,但是嵌套的时候大家最好一个语句一个语句分析,不要冗杂在一起分析(就是要一个一个看,别手忙脚乱的。)窍门:分析外面if时,里面的for循环当做普通java代码来看。

————————业务————————

当sex为true时表示男,为false时表示女

①正常打

if (sex){

System.out.println("男");

}else {

System.out.println("女");

}

②进一步改良(三目运算符)

sex = true;

System.out.println(sex ? "男" : "女");

代码可以这样写吗

if (sex = true){

System.out.println("男");

else {

System.out.println("女");

}

}

可以,小括号当中最终取的是sex变量的值(等号右面先赋值给左面),而sex是布尔类型,所以这个可以通过。

但有一个问题:即使在程序前面给sex赋值成false也没用,因为到括号里sex又被重新赋值成true了,永远都会执行第一个语句。(else后面的语句没用了属于是)

——————————业务——————————

要求:

1、从键盘上上接受一个人的年龄。

 java.util.Scannner s = new java.util.Scanner(System.in)

 int num = s.nextInt()

2、年龄要求为【0-150】,其他值表示非法,需要提示非法信息。

3、根据人的年龄来动态的判断这个人属于生命的哪个阶段?

【0-5】婴幼儿

【6-10】少儿

【11-18】少年

【19-35】青年

【36-55】中年

【56-150】老年

4、请使用if语句完成以上的业务逻辑。

————————业务2———————————

1、系统接收一个学生的考试成绩,根据考试成绩输出成绩的等级

2、等级:

优:【90-100】

良:【80-89】

中:【70-79】

及格:【60-69】

不及格:【0-60】

3、要求是成绩是一个合法的数字,成绩必须在【0-100】之间,成绩可能带有小数。

————————业务3————————

从键盘上接收天气的信息:

1表示雨天 0表示晴天

同时从键盘上接受性别信息

1表示男 0表示女

业务要求:

①当天气是雨天的时候:

男的打一把大黑伞

女的打一把小花伞

②当天气是晴天的时候

男的出去玩耍

女的擦点防晒霜出去玩耍

需要使用if语句以及嵌套的方式展现这个业务

可以在程序的开始,接收两个数据,一个数据是天气,一个数据是性别。然后将这两个数据保存到变量中。

————————————————————————————————————————————————————

switch语句:

1、switch语句也是选择语句,也可以叫做分支语句

2、switch语句的语法格式

switch(值){

case值1:  // switch要和case对齐 这是规矩。

   java语句;

   java语句;....

   break;

case值2:

   java语句;

   java语句;....

   break;

case值3:

   java语句;

   java语句;....

   break;

default:

   java语句;

}

以上是一个完整的switch语句

其中,break语句不是必须的。default分支也不是必须的。

switch语句支持的值有哪些?

支持int类型以及String类型。

但一定要注意JDK的版本,JDK8之前不支持String类型,只支持int。JDK8之后,switch语句开始支持字符串String类型。

switch语句本质上是只支持int和String,但是byte,short,char也可以使用在switch语句当中,因为byte

short char可以进行自动类型转换。

switch语句中“值”与“值1”、“值2”比较的时候会使用“==”进行比较

3、switch语句的执行原理

“值”与“值1”进行比较,如果相同,则执行该分支当中的java语句,然后遇到“break”语句,switch语句就结束了。

 

如果“值”与“值1”不相等,会继续拿“值”与“值2”进行比较,如果相同,则执行该分支当中的java语句,然后遇到break语句,switch结束

注意:如果分支执行了,但是分支最后没有“break”,此时会发生case穿透现象。(也就是在没有break的情况下,匹配之后不会立即结束,而是接这往下执行,直到程序末端或者遇到break)

—————————业务———————————

写一个完整的switch语句:接收键盘输入,根据输入的数字判断星期几 0:星期日 1:星期一.......

关于default语句,当所有的case都没有匹配上的时候,执行default语句。

关于case合并的问题:

switch(num){

case 1: case 2: case 3:

System.out.println("星期一");

break;

case 4:

System.out.println("星期二");

break;

}

// 输入 1,2 或者3 都会显示“星期一”

day09课堂笔记

1、控制语句

for循环

while循环

do..while ...循环

什么是循环语句,为什么要使用循环语句?

因为在现实世界中,有很多事情需要重复或者反复的去做。对应到程序当中,如果有一行代码需要重复执行,此时为了减少代码量,我们使用循环语句。

循环语句的出现就是解决代码的复用问题。

1、for循环的语法机制以及运行原理?

语法机制:

for(初始化表达式;条件表达式;更新表达式){

循环体:// 循环体由java语句构成

java语句;

java语句;

java语句;

java语句;

java语句;

......

}

注意:

第一:初始化表达式最先执行,并且在整个循环中只执行一次。

第二:条件表达式结果必须是一个布尔类型,也就是:true或者false

执行原理:

先执行初始化表达式,并且初始化表达式只执行一次。

然后判断条件表达式的结果,如果条件表达式结果为true,则执行循环体。

循环体结束之后,执行更新表达式。

更新完之后,再判断表达式的结果,如果还是true,继续执行循环体

直到更新表达式执行结束之后,在此判断条件时,条件为false,for循环终止

更新表达式的作用是:控制循环的次数,换句话说,更新表达式会更新某个变量的值,这样条件表达式的结果才有可能从true变成false,从而终止for循环的执行,如果确实更新表达式,很有可能会导致死循环。

for(int i = 0; i < 10; i++){

System.out.println("i = " + i);

}

// 0 1 2 3.. 9

强调下,对于以上的这个for循环,其中int i = 0;

最先执行,并且只执行一次,而且i变量属于for循环的局部变量,for循环结束之后i的内存就释放了。这个i变量只能在for循环当中使用,属于for循环域,在main方法中没办法直接使用

for(int i = 0; i < 10; ){

System.out.println("i = " + i);

i++;

}

这样也可以,因为顺序是相同的,都是在输出完之后再进行自加

for(int i = 0; i < 10; ){

i++;

System.out.println("i = " + i);

}

这样,输出的东西会改变 从2到11。

for的其他形式

for(int i = 0; i < 20; i += 2){

System.out.println("value1 =" + i);

}

// 10 9 8 7 6 5 4 3 2 1

for (int i = 0 ; i < 10; i += 2){

System.out.println("value2 = " + i);

}

// 0 2 4 6 8

for (int i = 100; i > 0; i %= 3){

System.out.println("value2 = " + i );

}

// 100 1 1.... 1(死循环)

题目:

使用for循环,实现1-100所有奇数求和

至少给出两种解决方案。

第一种方案:

思路:先找出1-100所有奇数,然后再考虑求和的事。

第一步:先从1取到100,一个数字一个数字取出来。

第二步:既然可以得到每一个数字,那么我们进一步判断这个数字是否为奇数(方法是:奇数除以2余1)

int sum = 0;

for(int i = 1; i <= 100; i++){

if (i % 2 == 1){

sum += i;

}

}

System.out.println("1~100所有奇数求和结果是:" + sum);

// for循环中嵌套了if语句

// 声明sum的位置要注意,不能在循环体当中声明,这样会导致“计算器归0”

第二种方案:

sum = 0;

for(int i = 1; i < 100; i += 2){

sum += i;

}

System.out.println(sum);

优点:循环次数少,效率高

循环嵌套

1所有的合法的“控制语句”都可以嵌套使用。

2、for循环嵌套一个for循环执行原理是什么?(提示一下,不要因为for循环中嵌套了一个for循环,就感觉这个程序比较特殊,实际上可以这样看待:在分析外层for循环的时候,把里面的for当做一段普通的java语句/代码)

①单层for循环

for(int k = 0; k < 2; k ++){

System.out.println("k = " + k);

}

②循环两次

for(int k = 0; k < 2; k ++){

System.out.println("k = " + k);

}

for(int i = 0; i < 2; i ++){

System.out.println(i);

}

③嵌套

for(int k = 0; k < 2; k ++){

for(int i = 0; i < 10; i ++){

System.out.println(i);

}

}

③和②是一样的

③外面的for控制里面的for

④把i变量的定义放在外面会怎么样?

int i = 0;

for(int k = 0; k < 2 ; k ++){

for(; i < 10; i ++){

System.out.println(i);

}

}

⑤这种情况又会怎么样?

int i = 0;

for(int k = 0; k < 2; k++){

for(; i < 10; i ++){

System.out.println("k=" + k);

System.out.println("i=" + i);

}

}

// 这个跟上面不一样,只会输出一次0-9

为什么呢?

一、int i = 0在括号里的时候,循环体正常走完第一个循环,之后k为1,仍然小于2,循环体再来一次。

二、int i = 0在括号外的时候,循环体正常走完第一个循环,之后k仍为1,仍然小于2,但是此时由于没有重新给 i 归零,i仍为10,布尔表达式为false,所以i就不输出了,也就只有一次0-9

窍门: 在分析外层for循环的时候,把里面的for就当做一段普通的java语句/代码

————————业务——————————

写出九九乘法表

1 * 1=1

1 * 2=2 2 * 2=4

1 * 3=3 2 * 3=6

....... ......

先找下九九乘法表的特点

①:共九行

②:第一行一个,第二行两个,第三行三个。

public class Nine {

public static void main(String[] args){

for(int i = 1; i <= 9; i ++){

for(int j = 1; j <= i; j ++){

System.out.print(i * j);// 注意:这里不换行,所以不用ln

}

System.out.println();

}

}

}

// i是行号,即纵向循环

最重要的是:不要慌,把思路捋出来再写代码。最怕的是没找到特点/思路

while循环

1.while循环的语法机制以及执行原理

语法机制:

while(布尔表达式){

循环体;

}

执行原理:

判断布尔表达式的结果,如果为true就执行循环体,循环体结束之后,再次判断布尔表达式的结果,如果还是true,继续执行循环体,知道布尔表达式结果为false,while循环结束。

2、while循环有没有可能循环次数是0次?

可能。while循环的次数是:0~无穷次

//for while do..while.... 这些都是循环语句,可以相互嵌套。

for和while完全可以互换,只不过就是语法格式不一样。

for(in ti = 0; i < 10;){

i ++;

System.out.println(i);

}

int i = 0;

while(i < 10){

i ++;

System.out.println(i);

}

以上各两个程序输出的内容完全相同,只不过就是语法格式不一样。

目前要掌握的:

①:必须要将语法结构背会

②:必须要彻底的理解他们的执行原理

去实现案例,去实现功能。

先从简单的案例开始,慢慢的经过一个过程你才能解决复杂的问题。

do...while...循环语句

do...while....循环语句的执行原理以及语法机制

语法机制:

do{

循环体;

}while(布尔表达式);

// 注意:分号一定要加!!!!,别漏了!!!!

执行原理:

先执行循环体中的代码,执行一次循环体之后,判断布尔表达式的结果,如果为true,则继续执行循环体,如果为false循环结束。(先斩后奏)

对于do..while循环来说,循环体至少执行1次。循环体的执行次数是:1~无穷次

而对于while循环来说,循环体执行次数是:0~n次。

转向语句

关于转向语句:

break

conitune

return(后面会讲)

break语句

1、break语句比较特殊,特殊在:break语句是一个单词成为一个完整的java语句。另外:continue也是这样,他俩都是一个单词成为一条语句。

2、break翻译为“折断”、“弄断”

3、break语句用在哪里呢

用在两个地方,其他位置不行

第一个位置:switch语句当中,用来终止switch语句的执行。用在switch语句当中,防止case穿透现象,用来终止switch

第二个位置:循环语句当中,用来终止循环语句的执行

用在for当中

用在while当中

用在do...while...当中

4、以下的程序让大家更好的了解break语句

5、break;语句的执行并不会让整个方法结束,break;语句主要是用来终止离它最近的那个循环语句。

for(int i = 0; i < 10; i ++){

System.out.println("i = " + i);

}

// 以上只是一个普通的循环语句

for(int i = 0; i < 10; i ++){

if(i == 5){

// break语句会让离它最近的循环停止播放

break; // break; 终止的不是if(也不是针对if的),而是离它最近的循环

}

System.out.println("i =" + i); // 0 1 2 3 4

}

System.out.println("Hello World")

// 这里的代码照常执行,break;的循环并不会影响这里

continue; 语句:

1、continue翻译为:继续

2、continue语句和break语句要对比着学习

3、continue语句的作用是:

终止当前“本次”循环,直接进入下一次循环继续执行。

for(){

if(){ // 当这个条件成立时,执行continue语句

continue; // 当这个continue语句执行时,continue下面的代码不执行,直接跳过

}

// 以上的continue一旦执行,一下代码不执行,直接执行更新表达式。

code1;

code2;

code3;

code4;

}

4、continue语句后面可以指定循环吗?

可以的。

这里就不再讲了,自己测试下

                                                                                      

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/328545.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号