Java中的逻辑控制语句
一、顺序结构
关于顺序结构比较简单,就是按照一句一句地写代码,并无什么特殊点。
代码示例:
System.out.println(1);
System.out.println(2);
System.out.println(3);
//执行结果:
1
2
3
如果代码语句的顺序发生变化,最后的执行结果也会发生变化。
System.out.println(1);
System.out.println(3);
System.out.println(2);
//执行结果:
1
3
2
二、分支结构语句
1.if语句
(1)if语句的格式书写有三种:
第一种书写格式:
if(布尔表达式) {
//执行语句
}
例子:如果小明考试得了95及以上,妈妈就带小明去游乐场玩。
Demo:
int score = 100;
if(score >= 95) {
System.out.println("妈妈带小明出去玩!");
}
第二种书写格式:
if(布尔表达式) {
//执行语句
} else {
//执行语句
}
如果布尔表达式中的结果为true,则执行if中的语句,否则执行else中的语句。
例子:如果小明考了95分及以上,妈妈就带小明去玩,否则小明就去写作业。
Demo:
int score = 94;
if(score >= 95) {
System.out.println("妈妈带小明出去玩!");
} else {
System.out.println("小明去写作业");
}
第三种书写格式:
if(布尔表达式1) {
//执行语句1
} else if(布尔表达式2) {
//执行语句2
} else {
//执行语句3
}
如果布尔表达式1中的结果为true,则执行语句1,反之如果布尔表达式1的结果为false,则看布尔表达式2中的结果,如果其结果为true,则执行语句2,反之执行语句3。
例子:如果小明考了95及以上,妈妈就带小明去玩,如果没有95分以上但是有90分及以上,妈妈就给小明买糖吃,如果都没有达到,小明去写作业。
Demo:
int score = 89;
if(score >= 95) {
System.out.println("妈妈带小明出去玩!");
} else if(score >= 90) {
System.out.println("妈妈给小明买糖吃!");
} else {
System.out.println("小明去写作业!");
}
(2)if语句代码的练习
判断一个数是正数还是负数还是0:
Demo:
public class TestDemo {
public static void main(String[] args) {
System.out.println("请输入一个整数:");
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
if(num > 0) {
System.out.println(num+"是正数!");
} else if(num < 0) {
System.out.println(num+"是负数!");
} else {
System.out.println(num+"是0!");
}
}
}
(3)注意事项
- if( )中必须为布尔表达式,不能是赋值语句或者其他语句
- if(布尔表达式);这种写法是错误的,因为if()这个括号后不能有“;”
- 悬空else问题
public class TestDemo {
public static void main(String[] args) {
int a = 10;
int b = 20;
if (a==10)
if (b==10) {
System.out.println("haha!");
} else {
System.out.println("hehe!");
}
}
}
//执行结果:
hehe!
如果if/else语句中没有加大括号,也可以写语句,但是只能写一条,所以我们不建议这么去写代码,此时else和最近的if匹配,就像这里的else和第二个if语句匹配,正如代码所示,最后执行结果为hehe!是因为a=10,但是b不等于10,所以会执行else语句。
2.switch语句
(1)基本语法格式
switch(表达式) {
case 目标值1:
执行语句1
break;
case 目标值2:
执行语句2
break;
···
case 目标值n:
执行语句n
break;
default:\
//当内容都不满足时执行此语句
执行语句n+1
break;
}
先表达式的值,然后这个值和case语句依次比较,一旦有响应的匹配就执行该项下的语句,直到遇到break时结束,如果都不匹配就会执行default中的语句。
例子:根据day的值打印具体的星期几
Demo:
public class TestDemo {
public static void main(String[] args) {
System.out.println("请输入1-7中任意一个数字:");
Scanner scanner = new Scanner(System.in);
int day = scanner.nextInt();
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;
default :
System.out.println("星期天!");
break;
}
}
}
//执行结果:
3
星期三!
(2)注意事项
- case语句后面的常数值不能相同。
- switch语句括号中的表达式只能是以下类型:
- 基本数据类型:byte,short,char,int
- 引用数据类型:String字符串,枚举类型
- case语句前后顺序可以颠倒,匹配哪一个case就从哪一个位置向下执行,直到遇到了break或者整体结束为止。
- break不要遗漏,否则会失去多分支选择的效果。
- switch语句中的表达式不能过于复杂,例:switch(num<20 && num>10) 这样的表达式就会报错。
- switch语句虽然支持嵌套,但是一般不推荐!
例:
public class TestDemo {
public static void main(String[] args) {
int x = 1;
int y = 2;
switch (x) {
case 1:
switch (y) {
case 2:
System.out.println("好好学习!");
break;
}
break;
case 2:
System.out.println("天天向上!");
}
}
}
因为这样写的很不美观,实际中用的地方也不多。
三、循环语句
1.for循环语句
(1)基本格式
for(表达式1;布尔表达式2;表达式3) {
//执行语句
}
注:表达式1是用于初始化循环变量初始值设置,在循环的最开始执行,且执行一次。
布尔表达式2是循环条件,如果满足循环条件的话,那就执行循环体中的语句,否则循环结束。
表达式3是循环变量更新的方式,如i++。
(2)代码的执行方式:
1->2->3->2->3···直到循环结束。
代码示例:
Demo1:打印1-20的数字
for (int i = 1;i <= 20;i++) {
System.out.print(i + " ");
}
//执行结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Demo2:计算1-20的和
int sum = 0;
for (int i = 1 ;i<=20;i++) {
sum+=i;
}
System.out.println(sum);
//执行结果:
210
Demo3:计算5!
int ret = 1;
for(int i = 1;i<=5;i++) {
ret*=i;
}
System.out.println(ret);
//执行结果:
120
Demo4:计算1!+2!+3!+4!+5!的和
int sum = 0;
for(int j = 1;j<=5;j++) {
int ret = 1;
for(int i = 1;i<=j;i++) {
ret*=i;
}
sum+=ret;
}
System.out.println(sum);
//执行结果:
153
2.while循环
(1)基本格式
while(循环条件) {
//循环体
}
当循环条件为真时,进入循环,为假时,则循环结束。
(2)代码练习
Demo1:打印1-20数字
int i = 1;
while(i<=20) {
System.out.print(i + " ");
i++;
}
//执行结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Demo2: 计算1-20的和
int sum = 0;
int i = 1;
while(i<=20) {
sum+=i;
i++;
}
System.out.println(sum);
//执行结果:
210
Demo3:计算5!
int ret = 1;
int i = 1;
while(i<=5) {
ret*=i;
i++;
}
System.out.println(ret);
//执行结果:
120
Demo4:计算1!+2! +3!+ 4!+5!的和
int sum = 0;
int i = 1;
while (i<=5) {
int ret = 1;
int j = 1;
while(j<=i) {
ret*=j;
j++;
}
sum+=ret;
i++;
}
System.out.println(sum);
//执行结果:
153
(3)注意事项
- while和if语句一样,可以不用写上{},但是这样就只能在下面写一句代码行。
- while( )后不要写分号,这样程序会报错。
int num = 1;
while (num <= 10); {
System.out.println(num);
num++;
}
// 执行结果
[无任何输出, 程序死循环]
此时 ; 为 while 的语句体(这是一个空语句), 实际的 { } 部分和循环无关. 此时循环条件 num <= 10 恒成立, 导致代码
死循环了.
3.do while循环
(1)基本格式
do {
//循环体
}while(循环条件);
先将代码执行一遍,在判断循环条件,如果满足循环条件就再次进入循环,不满足则退出循环。
(2)代码练习
Demo1:打印1-10的数字
int i = 1;
do{
System.out.print(i + " ");
i++;
}while(i<=10);
//执行结果:
1 2 3 4 5 6 7 8 9 10
Demo2:计算1-20的和
int i = 1;
int sum = 0;
do {
sum+=i;
i++;
}while(i<=20);
System.out.println(sum);
//执行结果:
210
Demo3:计算5!
int i = 1;
int ret = 1;
do {
ret*=i;
i++;
}while(i<=5);
System.out.println(ret);
//执行结果:
120
Demo4:计算1!+2!+3!+4!+5!的和
int sum = 0;
int i = 1;
do {
int j=1;
int ret = 1;
do {
ret*=j;
j++;
}while (j<=i);
i++;
sum+=ret;
}while (i<=5);
System.out.println(sum);
//执行结果:
153
(3)注意事项
- 由于 do while 循环基本上不怎么用,推荐使用while和for循环代替。
- 不要忘记while( )后的分号。
4.break语句
break语句的功能是让循环提前结束。
示例代码讲解:
for(int i=1;i<10;i++) {
if(i==5) {
break;
}
System.out.print(i + " ");
}
//执行结果:
1 2 3 4
因为当i=5的时候,遇到break语句代码就会终止循环,退出循环,所以只打印了最开始的1 2 3 4。
5.continue语句
continue 的功能是跳过这次循环, 立即进入下次循环。
示例代码讲解:
for(int i=1;i<10;i++) {
if(i==5) {
continue;
}
System.out.print(i + " ");
}
//执行结果:
1 2 3 4 6 7 8 9
因为当i=5的时候,遇到continue语句,就会跳过此次循环,回到下一次循环的判断条件,所以没有打印5。
6.练习循环语句题目
(1)输入一个年份判断是否为闰年
Demo:
public class TestDemo {
public static void main(String[] args) {
for(int year = 1000;year<=2000;year++) {
if((year%4==0 && year%100!=0) || year%400==0) {
System.out.print(year+" ");
}
}
}
}
//执行结果:
1004 1008 1012 1016····2000
(2)打印100-200之间的素数
Demo:
public class TestDemo {
public static void main(String[] args) {
for (int i = 100;i<=200;i++) {
int j = 0;
for ( j = 2;j<i;j++) {
if(i%j==0) {
break;
}
}
if(j==i) {
System.out.print(i+" ");
}
}
}
}
//执行结果:
101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199
(3)计算1/1-1/2+1/3-1/4+···+1/99-1/100的值
Demo:
public class TestDemo {
public static void main(String[] args) {
double sum = 0;
int flag = 1;
for(int i=1;i<=100;i++) {
sum+=flag*1.0/i;
flag=-flag; //变成负号
}
System.out.println(sum);
}
}
//执行结果:
0.688172179310195