前言:
本篇博客将为大家介绍Java中的逻辑控制。
目录
顺序结构
顺序结构非常简单,就是按照代码书写的顺序一行一行地往下执行。
分支结构
if语句
- if(布尔表达式){……};
布尔表达式为true,则执行大括号里面的语句
- if(布尔表达式){……}else{……};
如果布尔表达式为真,执行第一个大括号里面的语句,否则执行第二个大括号内的语句
- if(布尔表达式1){……}else if(布尔表达式2){……}else{……};
如果布尔表达式1为真,执行第一个大括号内的语句;如果不为真,再看布尔表达式2是否为真,若为真,执行第二个大括号内的语句;如果仍旧为假,则执行第三个大括号内的语句举例:
- 判断一个数是正数、负数还是0:
public class Main { public static void main(String[] args) { int num = 10; if(num > 0){ System.out.println("该数是正数"); }else if (num == 0){ System.out.println("该数是0"); }else{ System.out.println("该数是负数"); } } }
- 判断数是奇数还是偶数:
public class Main { public static void main(String[] args) { int num = 10; if(num / 2 == 0){ System.out.println("该数是偶数"); }else{ System.out.println("该数是奇数"); } } }
- 判断一个年份是不是闰年:
public class Main {
public static void main(String[] args) {
int year = 1900;
//判断一个数是否是闰年:
//普通闰年:不是100的倍数,是4的倍数
//世纪闰年:是100的倍数同时也要是400的倍数
if (year % 100 == 0) {
if (year % 400 == 0) {
System.out.println("该年份为闰年");
} else {
System.out.println("该年份不是闰年");
}
} else {
if (year % 4 == 0){
System.out.println("该年份为闰年");
}else {
System.out.println("该年份不是润年");
}
}
}
}
格式问题:
- 如果else、if里的大括号里只有一条语句,大括号是可以省略的,且else永远都是和离它最近的if配对的。但是如果是在if、else众多的情况下,还是尽量不要省略,因为谁和谁配对容易搞错,可以试着把上面判断闰年的代码的大括号去掉看一下。(悬垂else问题)
- 分号问题:如果在if()后面直接加上分号,分号就成为了if语句的语句体,而{……}中的代码就变成了和if无关的语句了
- 推荐两种else、if的写法:
更推荐第一种,代码更加紧凑。
switch语句
格式:
switch (表达式){ case 常量1:{ 语句1; [break;] } case 常量2:{ 语句2; [break;] } …… default:{ 内容都不满足时执行的语句; [break;] } }
执行顺序:
- 先计算表达式的值
- 和switch里面的case依次匹配,一旦和其中的一条匹配上就从那条开始执行,直到遇到break结束
- 如果和所有的case语句都无法匹配上就执行default语句
举例:
根据day的值来输出星期:
{
int day = 4;
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后面的常量不可重复
- switch后的括号只能是以下类型的表达式:
- 基本类型: byte、char、short、int,不能是long、float、double类型
- 引用类型:String常量类型、枚举类型
- break不要随便遗漏,否则将失去“多分支选择”的效果。简单来说就是如果case的大括号语句中不写break语句,则计算机会接着执行下一条语句,不会跳出switch
- switch不能表达复杂的条件(如大于10小于20)
- switch虽然支持嵌套,但是不太美观,所以并不是很推荐使用
循环结构
while循环
while(循环条件){……};
循环条件为真,则执行大括号里的语句,否则循环结束
举例:
- 打印1-10的数字
- 计算1-100的和
- 计算5的阶乘
- 计算1!+2!+3!+4!+5!的和:
注意:while和if有很多相似之处:
- 大括号中的语句只有一条的时候,大括号可以不写
- while(循环条件)后面的大括号的左半边建议写在它后面,不要再另起一行了,这样使得代码更加紧凑
- while(循环条件)后面不要直接写分号,不然会和if一样,使得循环无法正确执行
break
break的作用是让整个循环提前结束。
对比:
continue
continue的作用是跳出这次循环,立即进入下次循环。
for循环
for(表达式1;表达式2;表达式3){……};
表达式1:用于初始话循环变量初始值设置,在循环最开始的时候执行,只执行一次
表达式2:循环条件,为真循环继续,否则结束循环
表达式3:循环变量更新方式
举例:
- 打印1-10的数字
- 计算1-100的和
- 计算5!的值
- 计算1!+2!+3!+4!+5!的和
注意事项:
- 和if、while一样,for后面的大括号可以省略,但是省略的时候大括号内只能有一条语句
- 和if、while一样,for()后面也建议紧跟{,有助于代码的紧凑
- 和if、while一样,for()后面不要直接跟分号,会使得循环无法正确执行
- 和while一样,想要结束单趟循环用continue,想要结束整个循环用break
do while循环
do{……}while(循环条件);
先执行一次大括号里面的代码,再判断是否满足while后小括号内的循环条件 ,满足则接着执行,否则循环结束
举例:
打印1-10:
注意:
- while()后面的分号不要忘记
- do-while语句很少用,更加推荐for和while循环
输入输出
输出到控制台
- System.out.println();……输出一个字符串,带换行
- System.out.print();……输出一个字符串,不换行
- System.out.printf();……格式化输出,和C语言的基本一样
格式化字符串:
从键盘输入
使用Scanner读取字符串、整数、浮点数
import java.util.Scanner;
public class Demo1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你的姓名:");
String name = scanner.nextLine();
System.out.println("请输入你的年龄:");
int age = scanner.nextInt();//nextInt()可以拿到整型
System.out.println("请输入你的全部科目的平均分:");
double avgGoal = scanner.nextDouble();//数据是什么类型,就用nextxxx()来输入该类型的数据,xxx表示类型
System.out.println("你的信息如下:");
System.out.println("name = "+name+", age = "+age+", avgGoal = "+ avgGoal);
scanner.close();//调用关闭方法
}
}
对于next()和nextLine():
大家可以通过对这篇博客的阅读来对这两个方法有更好的了解:
http://【[Java基础]Scanner中next()和nextLine()方法的使用和区别 - CSDN App】http://t.csdnimg.cn/mvE4e
使用Scanner循环读取N个数字,并求取其平均值:
import java.util.Scanner;
//使用Scanner循环读取N个数字,并求取其平均值
public class Demo2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int sum = 0;
int count = 0;
while (scanner.hasNextInt()){//hasNextInt()表示是否有下一个整数的意思(是xxx数据类型就用对应得hasNextxxx()方法
int n = scanner.nextInt();
sum += n;
count++;
}//这个循环中并未写让其停下来得条件,因为是自己通过键盘输入,所以HasNextInt()一直都会为真,这时候就要自己手动让它停下来
//windows上为ctrl+z、Linux/Mac上为ctrl+d、IDEA上必须用ctrl+d
double avg = sum/count;
System.out.println(sum);
System.out.println(avg);
}
}