流程控制——顺序、分支、循环语句


1.1. 流程控制

1.1.1. 顺序语句

顾名思义,就是程序从上到下一行一行执行的结构。

单独一个 ; 叫空语句

例:

System.out.println(‘a’);;

相当于

System.out.println(‘a’);

;

错误:

System.out.print(a);

int a =1;

1.1.2. 分支语句

代码运行时需要依赖一个条件。

分支语句共三种

if语句

ifelse…语句

switch语句

if语句

格式:

if(表达式){

条件表达式为真时执行的语句序列;

}

表达式只要满足值为boolean型的数据即可,如:关系表达式、逻辑表达式、布尔类型的变量或常量、truefalse

如果语句序列只有一句执行语句,大括号{}可省略。

例:

int num=0;

if(num>=0)

num++;

System.out.println(num);//1

int num=0;

if(num<0)

num++;

System.out.println(num);//0

int num=0;

if(num>=0);

num++;

System.out.println(num);//1

注意看这道题:

int num=0;

if(num++<0);

num++;

System.out.println(num);//2

顺序语句要看清楚有没有分号,这是面试题中可能会出现的陷阱,千万不要说加了一个分号语法错了。

if…else…语句

语法结构:

if(条件表达式){

条件表达式为真时执行的语句序列

}else{

条件表达式为假时执行的语句序列

}

可以有ifelse,光有else没有if绝对不可以!

例:

if(true);{.....}

else{....}

补充一点:

if...else语句执行的结果是为同一个变量赋值,且执行语句都只有一句话时,可以使用三目运算完美替代

例:int num = -33;

int res = num>=0 ? num : -num;

switch语句

有列举、分组的情况,用switch很好。

语法格式:

switch(变量){

case 1:语句序列; [break;]

case 2:语句序列; [break;]

case 3:语句序列; [break;]

default:语句序列

}

语法特点:switch语句一旦与某个值匹配成功后,将执行对应的语句和余下所有的语句,直到遇到break语句,跳出

注意,不要混淆caseelseifelseif是一旦匹配就不再执行后面的else语句,而case语句只是相当于定义了一个标签位置

switch一旦碰到了第一次case匹配,程序就会跳转到这个标签位置,开始顺序执行以后所有的程序代码,而不管后面的case

条件是否匹配,后面case条件下的所有代码都将被执行,知道碰到break语句为止。

switch语句可以用于比对的变量类型(6

byteshortintchar(都有整数表现形式)

JDK6.0 枚举

JDK7.0 String

而且,switch()接受匹配类型的表达式,如:switch(age/10)

思考:switch为什么不接受long类型呢?

答:因为long类型数据太长,比对情况太多。

switch依赖于break强行改变程序流程,这种设计是我们所反感的,因为程序讲究逻辑性、顺序性、完整性。

然而有人利用这个特性做了一些事情:

int month = 9;

switch(month){

case 1:

case 3:

case 5:

case 7:

case 8:

case 10:

case 12: System.out.println(month+"月有31");break;

case 4:

case 6:

case 9:

case 11: System.out.println(month+"月有30");break;

case 2: System.out.println(month+"月有28");break;

default : System.out.println("月份输入错误");

}

switch语句面试中的考点:
int a = 4;

switch(a){

case  1: System.out.println(1);

default : System.out.println("default");

case  2: System.out.println(2); break;

case  3: System.out.println(3);

打印结果:

default

2

default语句定义了所有case都不满足的情况下执行的语句,无论default处于何处,并且default语句沿用switch语句的break退出语句结构的特点

1.1.3. 循环语句

循环语句不难写,真正难写的是循环体部分。

循环语句有三种结构

for

while

dowhile

for语句

已知次数循环,且内存上比while略优

语法格式:

for(语句1;条件表达式;语句2){

语句3

}

for语句的执行顺序是

语句1→条件表达式→语句→语句→条件表达式…

拓展一:

语句1处要么执行语句,可以写多句,中间使用逗号分隔。

要么写声明语句,可以声明多个变量,但要保持类型相同。

语句3处,可以写多句执行性句,中间用逗号隔开

例:

for(int i,i;;){}//int i是声明语句,而且声明了多个变量

for(int i,double b;;)// 错!类型不一致

int i=1;for(i++i++;;)// i++执行性语句

for(int i=0;;i++,i++)//多句执行性语句,用逗号隔开

for(System.out.print(‘a’);System.out.print(‘a’);false;)//编译失败,falseJAV虚拟机不运行通过

boolean b= fasle;for(System.out.print(‘a’),System.out.print(‘a’);b;)//结果ab,注意两条输出语句之间是用,做分隔符的。

拓展二:无限循环

for(;;){}

for(;true;){}

无限循环不能停止,所以后面不能写语句,但是可以使用if结构欺骗JVM使其编译通过。

if(true){

for(;;)

}

S.o.p(“123”);//这个程序运行起来就永远在那里跳闪。

JVM认为,if语句不一定执行,所以编译能够通过,但是实际中,永远运行不到S.o.p(“123”);

拓展三:循环嵌套

要求至少会打印99乘法表,高级加行号、竖线、行线。

面试题一:

打印100以内的偶数

错误做法:for(int i=0;i<=100;i=i+2)

System.out.println(i);

这种做法是错误的,这么做是在改题,这是人脑和PC合成出来的,不是计算机的思维

正确做法:循环着对1100对所有数进行判断,是偶数→打印,这才是计算机思维。

面试题二:

100以内,逢7N)过酒令

class Demo6{

public static void main(String[] args){

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

if(i%7==0||i%10==7||i/10==7)

System.out.println('');

else

System.out.println(i);

}

}

这样打印结果不好看,优化一下代码。去掉lnprint(“过\t”)print(i+”\t”)

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

if(i%7==0||i%10==7||i/10==7)

System.out.print("\t");

else

System.out.print(i+"\t");

那么,思考,3位数以内、4位数、5位数以内的过酒令。

while

未知次数循环

先判断while中的表达式结果是否为truetrue则执行循环体,执行结束之后再次判断,如果表达式结果为false则跳出循环。

打印三位数以内的水仙花数:

int i=100;

while(i<=999){

int a =i/1%10;

int b=i/10%10;

int c=i/100%10;//全都转化到个位,然后取模

if(a*a*a+b*b*b+c*c*c==i){

System.out.println(i);

}

i++

do...while

先执行一次循环体,然后判断while中的表达式,如果是true继续执行,如果是false则跳出循环。

注意while();末尾的分号不要遗漏。

continuebreak

continue:跳过当前循环,继续执行下一次循环

break:结束循环,跳转到循环语句结束的大括号处,执行大括号后的内容(所以有语句跳转的功能)

注意加标号的break使用,必须要求被控制的循环包裹着break语句。并列在前或在后皆不可,可以简单理解为,前:都运行完了控制干什么。后:还没运行到呢怎么控制。(这些东西以后基本上用不到)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值