目录
一、概述与顺序结构
1.逻辑控制的概述
2.顺序结构
二、分支结构
1.if语句
2.switch语句
3.switch语句与if语句的对比
三、循环结构
1.while语句
2.for语句
3.do…while循环(选学)
四、循环的跳转
1.break语句
2.continue语句
五、总结(与C的差异)
逻辑控制包括三种结构:顺序结构,分支结构和循环结构,这里主介绍后面两种
顺序结构是结构中最简单,也是最常见的一种。从上到下写代码,从上到下打印数字,就是顺序的一种
分支结构有两种:if语句和switch语句
(1)简单的if条件语句
【语法规则】如果布尔表达式结果为true,执行if中的语句,否则不执行
if(布尔表达式){
// 复合语句
}
【实例】
public static void main(String[] agrs) {
int score = 88;
if(score>=80) {
System.out.println("分数>="+score+"可以吃大鸡腿");
}
}
只要满足条件,就会进入花括号内执行语句;否则直接跳过。
(2)if…else语句
【语法规则】如果布尔表达式结果为true,则执行if中语句,否则执行else中语句
if(布尔表达式){
// 复合语句1
}else{
// 复合语句2
}
【实例】二选一
public static void main(String[] agrs) {
int score = 88;
if(score>=90) {
System.out.println("吃鸡腿");
} else {
System.out.println("吃大嘴巴子");
}
}
(3)if…else if多分支语句
【语法结构】表达式1成立,执行语句1,否则表达式2成立,执行语句2,否则执行语句3。其中,可以嵌套多层else if结构
if(布尔表达式1){
// 语句1
}else if(布尔表达式2){
// 语句2
}else{
// 语句3
}
【实例】
题目:
分数在 [90, 100] 之间的,为优秀
分数在 [80, 90) 之前的,为良好
分数在 [70, 80) 之间的,为中等
分数在 [60, 70) 之间的,为及格
分数在 [ 0, 60) 之间的,为不及格
错误数据
public static void main(String[] agrs) {
int score = 88;
if(score >= 90){
System.out.println("优秀");
}else if(score >= 80 && score < 90){
System.out.println("良好");
}else if(score >= 70 && score < 80){
System.out.println("中等");
}else if(score >= 60 && score < 70){
System.out.println("及格");
System.out.println("不及格");
}else{
System.out.println("错误数据");
}
}
}
(4)代码风格与易错点
【代码风格】
建议:{ 放在 if / else 同一行
int x = 10;
if (x == 10) {
// 语句1
} else {
// 语句2
}
【易错1】分号问题:在if后面加了个分号
public static void main(String[] args) {
int a=10;
if(a>12);
{
System.out.println("测试");
}
}
【易错2】悬垂else:也就是if与else的配对问题
public static void main(String[] args) {
/* int a=10;
if(a>12);
{
System.out.println("测试");
}*/
int x = 10;
int y = 10;
if (x == 10)
if (y == 10)
System.out.println("aaa");
else
System.out.println("bbb");
}
正确做法:需要合理使用括号,不然易出现错误
public static void main(String[] args) {
int x = 10;
int y = 10;
if (x == 10) {
if (y == 10)
System.out.println("aaa");
}else
System.out.println("bbb");
}
(1)基本语法
switch(表达式){
case 常量值1:{
语句1;
[break;]
}
case 常量值2:{
语句2;
[break;]
}
...
default:{
内容都不满足时执行语句;
[break;]
}
}
【执行流程】
1. 先计算表达式的值
2. 和case依次比较,一旦有响应的匹配就执行该项下的语句,直到遇到break时结束
3. 当表达式的值没有与所列项匹配时,执行default
(2)代码实例:根据 day 的值输出星期
public static void main(String[] args) {
int day = 1;
switch(day) {
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
case 4:
System.out.println("星期四");
break;
case 5:
System.out.println("星期五");
break;
case 6:
System.out.println("星期六");
break;
case 7:
System.out.println("星期日");
break;
default:
System.out.println("输入有误");
break;
}
}
表达式的值会与case后面的值匹配,决定从哪个入口进去
(3)switch语句需要注意的点
(1)if语句中的表达式可以是复杂表达式,但是switch不能表达复杂的条件
(2)分支越多,switch语句的优质越大
(3)从使用效率上区分,早对同一个变量的不同值作条件判断时,使用switch语句的效率更高一些,尤其分支越多的时候;从语句的实用性的角度,switch语句肯定不如if语句
(1)语法结构
while(条件表达式){
循环体;
}
(2)用法举例:用while循环打印1-10的数字
public static void main(String[] args) {
int i=1;
while(i<=10) {
System.out.println(i);
i++;
}
}
(1)语法结构
for(表达式1;布尔表达式2;表达式3){
循环体;
}
表达式1:该表达式用于初始化循环控制变量,它只在循环开始时执行一次。
表达式2:循环条件表达式,它的类型为boolean,如果表达式的值为true就执行一次循环体。
表达式3:该表达式用于改变循环体变量的值。
(2)代码实例:用来计算1-100数字的和
public static void main(String[] args) {
int i = 1;
int sum = 0;
for(i=1;i<=100;i++) {
sum+=i;
}
System.out.println(sum);
}
(1)语法结构
do{
循环语句;
}while(循环条件);
与while循环不同,do…while循环无论条件是否满足,都会执行一次循环语句,剩下的与while循环相同。
(2)注意事项
do while 循环最后的分号不要忘记
循环的跳转也就是由两个语句控制:break与continue;在C语言中都学过,break也就是跳出整个循环体,而continue就是跳过本次的循环(会少一次循环次数),直接进入下一场的循环。
break语句分为两种:不带标号的break与带标号的break。
(1)不带标号的break语句
【介绍】不带标号的break也就是常见的break,用于终止break语句所在的循环。
【用处】可以用在switch、while循环、do…while循环和for循环中
【实例】用来求1-100数字的和,计算完就跳出循环
public static void main(String[] args) {
int sum = 0;
int control = 1;
while(true) {
sum+=control;
if(control==100) {
break;
}
control++;
}
System.out.println("1-100的总和="+sum);
}
(2)带标号的break语句
【语法结构】break 标号;
意思:将标号后面的循环终止
【用处】可以终止标号指定的循环,常用于跳出多层循环的情况
【实例】当九九口诀表的积大于16时终止外层循环(部分,用于测试)
先看没有使用break的时候:
public static void main(String[] args) {
int i = 1;
for(i=1;i<=5;i++) {
int j = 1;
for(j=1;j<=i;j++) {
System.out.println(i+"*"+j+"="+(i*j));
}
System.out.print("\n");
}
}
加了标号:
public static void main(String[] args) {
int i = 1;
loop: for(i=1;i<=5;i++) {
int j = 1;
for(j=1;j<=i;j++) {
if(i*j>10) {
break loop;
}
String result = String.format("%-1d*%d=%-2d", j, i, (i * j));
System.out.print(result + " ");
}
System.out.print("\n");
}
continue语句也分为两种,不带标号的continue语句和带标号的continue语句
(1)不带标号的
【介绍】和常见的continue一样,用于终止一次循环,进入下一次循环
【去向】常用在while、do…while和for语句中
【用例】输出1-100的数字,过滤掉不能被7整除的数
public static void main(String[] args) {
int i = 1;
for(i=1;i<=100;i++) {
if(i%7!=0) {
continue;
}
System.out.println(i+"、");
}
}
(2)带标号的
【语法格式】continue 标号;
【用处】跳过标号指定的循环语句一次循环,然后判断指定标号的循环条件,以决定是否执行标号指定的循环
【用例】使用带标号的for循环和带标号的continue语句输出九九口诀表
public static void main(String[] args) {
outer:for(int i=1;i<=9;i++) {
for(int j=1;j<=9;j++) {
if(j>i) {
System.out.println();
continue outer;
}
String result = String.format("%-1d*%d=%-2d", j, i, (i * j));
System.out.print(result + " ");
}
System.out.println();
}
}
去掉标号:
(1)if语句的条件表达式必须是布尔表达式
(2)switch的表达式可以是字符串,但是有类型的限制
(3)多了带标号的break和continue