3.1 .顺序结构语句
顺序结构的程序设计是最简单的,只要按照解决问题的顺序写出相应的语句就行,
它的执行顺序是自上而下(从上到下并不是真的从第一行向最后一行运行,而是按照程
序的执行流程一行一行往下走,从主函数里面一行一行往下走),依次执行。
3.2. 选择结构if语句格式
语句根据条件是真或者是假,决定执行的路径。
①单分支if语句
if(布尔表达式){
语句体;
}
**执行流程
首先判断条件表达式,如果值为true,那么就执行if语句所控制的语句体。
如果为false,就不执行语句体。
**注意事项
(1)if(条件表达式)其后没有分号。
一般来说,有"{}"有没有";",有";"就没有"{}"
(2)if语句所控制的语句如果是一条语句,我们可以不写大括号;
如果控制的是两条以上的语句,必须加大括号。
if语句的控制体没有加大括号是其后跟的一条语句。
建议:永远加上大括号。避免不必要的错误
②双分支if-else语句
if(布尔表达式){
语句体;
}
else{
语句体;
}
**执行流程
首先判断条件表达式,如果值为true,那么就执行语句1。
如果为false,就执行语句2。
③嵌套if语句
if(布尔表达式){
if(布尔表达式){
语句体;
}
语句体;
}
④多分支if-else语句
if(布尔表达式){
语句体;
}else if(布尔表达式){
语句体;
}else{
语句体;
}
else可以省略,但是不建议。
(1)是第三种格式的组成部分。
(2)有可能没有判断完所有的情况,就可以使用else来完成特殊情况。
**执行流程
虽然格式很长,但是,它整体只是一条语句。
不断的判断,只要有满足条件的条件表达式,就执行该判断处控制的语句体,
执行完后。语句结束。当都不满足时候,执行else。
** if语句注意事项
(1)if后面必须有条件表达式。 else后面可以没有条件表达式。
(2)if语句的嵌套,if语句里面的语句体还是if语句。
(3)关系表达式无论简单还是复杂,结果必须是boolean类型
(4) if语句控制的语句体如果是一条语句,大括号可以省略;如果是多条语句,
则不能省略;建议永远不要省略
(5)一般来说:有左大括号姐没有分号,有分号就没有左大括号。
**三种if语句分别适合做什么事情
格式1:适合做单个判断
格式2:适合做两个判断
格式3:适合做多个判断
3.3 if改写成三目运算符: 表达式?值1:值2;
**区别:
(1)三元运算符中只能是值,不能是输出一句话。
(2)所有的三元运算符都可以用if语句改写。反之不行。
当if语句控制的语句体是一条输出语句时,就不成立,因为三元运算符是一个运算符,
必须要求有一个结果返回。而输出语句不能作为一个返回结果。
3.4 选择语句中常见的错误和陷阱
错误
(1)忘记必要的括号。
(2)在if行出现错误的分号
(3)对布尔值的荣誉测试
(4)悬空else出现的歧义
(5)两个浮点数值的相等测试
陷阱
(1)简化布尔变量赋值
(2)避免不同情形中的重复代码
3.5 选择结构switch语句的格式及其解释
一般形式:
switch(表达式){
case 常量表达式1: 语句1;break;
case 常量表达式2: 语句2;break;
…
case 常量表达式n: 语句n;break;
default: 语句n+1;[可选的]
}
意思是:先计算表达式的值,再逐个和case 后的常量表达式比较,若不等则继续往下比较,若一直不等,则执行default后的语句;若等于某一个常量表达式,则从这个表达式后的语句开始执行,并执行后面所有case后的语句。
3.6 选择结构switch语句的注意事项
①switch 表达式必须能计算出一个char、byte、 short、 int 或者String型值,
并且必须总是要用括号括住。(char和String类型将在下一章介绍。)
②value1, ... valueN必 须与switch表达式的值具有相同的数据类型。注意 valuel, ... valueN
都是常量表达式,也就是说这里的表达式是不能包含变量的,例如,1允许出现1+X。
③当switch表达式的值与case语句的值相匹配时,执行从该case开始的语句,
直到遇到一个break语句或到达该swi tch语句的结束,
④默认情况(default)是可选的,当没有一个给出的case与switch表达式匹配时用来执行该操作。
default可以在任意位置 ,不一定在最后。
⑤关键字break是可选的。break语句会立即终止switch语句。break可以省略,但是当前不结束。
⑥switch中可以在case中嵌套if-else语句。
⑦ase后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的
**警告不要忘记在需要的时候使用break语句。一旦匹配其中一个case,就服从匹配。
3.7 switch与if语句的不同:
If语句中若判断为真则只执行这个判断后的语句,执行完就跳出if语句,不会执行其他if语句;
switch语句不会在执行判断为真后的语句之后跳出循环,而是继续执行后面所有case语句。在每一case语句之后增加break 语句,使每一次执行之后均可跳出switch语句,从而避免输出不应有的结果。
3.8 选择结构switch和if语句的各自使用场景
switch 建议判断固定值的时候用
if建议判断区间或范围的时候用
用switch能做的,用if都能做,反之不行。
3.8.产生随机数方法
Math.random()获取一个[0,1)之间的随机double值。
想要得到某一个范围内的数:只需乘上相应的倍数,或者加上相应的数字。
3.10 小结
1.选择语句用于可选择的动作路径的编程。选择语句有以下几种类型:单分支f语句、、嵌套计语句、多分支if-e1se语句、switchi语句和条件表达式。
2.各种if语句都是基于布尔表达式来控制决定的。根据表达式的值是true或者false,这些语句这些语句选择两种可能路径中的一种。
3. switch语句根据char、byte、short、int 或者String类型的switch表达式来进行控制决定。
4.在switch语句中,关键字break是可选的,但它通常用在每个分支的结尾,以中止执行switch语句的剩余部分。如果没有出现break语句,则执行接下来的case语句。
3.11 经典例题:
-
游戏:(剪刀、石头、布)编写可以玩流行的剪刀-石头-布游戏的程序。(剪刀可以剪布,石可以砸剪刀,而布可以包石头。)程序提示用户随机产生一个数,这个数为0、1或者2,分别表示石头、剪刀和布。程序提示用户输人值0、1或者2,然后显示一条消息,表明用户和计算机谁赢了游戏,谁输了游戏,或是打成平手。
import java.util.Scanner; public class Demo1 { //剪刀 0 石头 1 布2 public static void main(String args[]){ int com=(int)(Math.random()*3); Scanner sc=new Scanner(System.in); System.out.print("Enter a number"); int user=sc.nextInt( ); String x=""; String y=""; if(user==0) { x="scissor"; }else if(user==1) { x="rock"; }else{ x="cloth"; } if(com==0) { y="scissor"; }else if(com==1) { y="rock"; }else{ y="cloth"; } if(com==user) { System.out.println("com"+y+" user"+x+"平局"); }else if((com+1)%3==user) { System.out.println("com"+y+" user"+x+"用户赢"); }else { System.out.println("com"+y+" user"+x+"用户输"); } } }
这是一种简洁的解题思路:石头能胜出剪刀,即1胜出0;布能胜出石头,即2胜出1;剪刀能胜出布,即0胜出2;总结相邻的两个数字大的能胜出小的。不相邻的两数电脑产生的数+1对3取余,如果相等就是用户赢,否则用户输。
-
(回文数字) 编写一个程序,提示用户输人一个三位的整数,然后确定它是否回文数字。当从左到右,以及从右到左都是-一样的话,这个数字称为回文数。
import java.util.*; public class Demo1{ public static void main(String args[]){ Scanner sc=new Scanner(System.in); System.out.print("Enter a number"); int user=sc.nextInt( ); int oriNum=num; int a=num/1000;//千位 num%=1000; int b=num/100;//百位 num%=100; int c=num/10;//十位 int d=mun%10;//个位 newNum=d*1000+c*100+b*10+a; //重新组装新数字 if(oriNum==newNum){ System.out.println("是回文数字"); }else{ System.out.println("不是回文数字"); } } }
这个题的思路是:将一串数字每一位都拆分出来,在将原先的个位组成新数字的最高位,原先的最高位组成新数字的最低位,以此类推。求出新数字,将其和原数字比较,一致就是回文数字,否则不是回文数字。
-
判断一个矩形是否在一个矩形内
解题思路:写出外面矩形的四边的方程 写出里面矩形的四边的方程 分别求出里面矩形每一边与外面矩形两边的交点(一条边两个)。 判断里面矩形的顶点是否超过交点(比较其x,y的值) 如果超过交点里面矩形没有在外矩形内 否则:在外矩形内。