文章目录
一、分支结构
1、if语句–单分支
使用格式:
if(布尔表达式){
//布尔表达式为true时执行的代码
}
举例:使用if判断
public class Test{
public static void main(String[] args){
int a = 10;
int b = 20;
if(a < b){
System.out.println(a);
}
}
}
输出结果:
10
以上的a < b判断之后为true,因此执行System.out.println(a);这条语句。如果布尔表达式为false,则不会执行if大括号里边的代码块。
2、if…else…双分支语句
使用格式:
if(布尔表达式){
代码块
}else if(布尔表达式){
代码块
}
举例:使用双分支判断输出结果
public class Test{
public static void main(String[] args){
int a = 20;
int b = 20;
if(a < b){
System.out.println("a<b");
}else{
System.out.println("a>=b");
}
}
}
输出结果:
a>=b
上述的分支必须遵守的原则为:必须先判定if(a<b)且布尔表达式为false的时候才会执行else中的代码块。
3、if…else if…else…多分支语句
使用格式:
if(布尔表达式){
代码块
}else if(布尔表达式){
代码块
}else{
代码块
}
public class Test{
public static void main(String[] args){
int a = 20;
int b = 20;
if(a < b){
System.out.println("a<b");
}else if(a == b){
System.out.println("a=b");
}else{
System.out.println("a>b");
}
}
}
输出结果:
a>b
对于多分支结构,可以在中间加入多个else if进行中间条件判定。
说明:单分支、双分支、多分支三者之间又可以相互嵌套使用。
4、switch分支语句
基本语法:
switch(整数|枚举|字符|字符串){
case 内容1:{
//与内容1相同时执行的代码块
[break;]
}
case 内容2:{
//与内容1相同时执行的代码块
[break;]
}
default:{
//上述内容都不满足时执行的语句
[break;]
}
}
举例:输出红绿蓝三基色
public class Test{
public static void main(String[] args){
char red = '红';
switch(red){
case '红':{
System.out.println("红色");
break;
}
case '绿':{
System.out.println("绿色");
break;
}
case '蓝':{
System.out.println("蓝色");
break;
}
default:{
System.out.println("输入错误");
break;
}
}
}
}
上述代码是以字符作为判断依据,传入参数之后先与第一个字符比较,若相同,则执行case语句中的代码。
输出结果:
红色
注意事项:
①:switch中的值必须是整数|枚举|字符|字符串,如果为byte,short类型则自动转换为int类型的值,而double,float,long,boolean则不能使用。
②:若没有特殊要求,每一个case的代码块的最后一句必须加上break来结束分支结构。如果没有加break将会一直向下执行每一个的case代码块,直到遇到break才会结束。
③:switch分支语句中可以不带default分支,但是建议带着default分支比较好。该分支表示默认,即该分支接收所有没有匹配的内容。
注意一下两种情况:
第一种:当第case不匹配且没加break | 第二种:当第case匹配且没加break |
---|---|
public class Test{ public static void main(String[] args){ char red = ‘红’; switch(red){ case ‘绿’:{ System.out.println(“绿色”); //break; } case ‘红’:{ System.out.println(“红色”); break; } case ‘蓝’:{ System.out.println(“蓝色”); break; } default:{ System.out.println(“输入错误”); break; } } } } | public class Test{ public static void main(String[] args){ char red = ‘红’; switch(red){ case ‘红’:{ System.out.println(“红色”); //break; } case ‘绿’:{ System.out.println(“绿色”); break; } case ‘蓝’:{ System.out.println(“蓝色”); break; } default:{ System.out.println(“输入错误”); break; } } } } |
红色 | 红色 绿色 |
第一种情况:虽然第一个匹配项没加break,但是内容与值不匹配,因此不会输出绿色。继续向下寻找匹配项,直到找到红,然后输出结果,且存在break,结束分支。
第二种情况:虽然第一个匹配项同样没加break,但是第一个case与值匹配,则输出红色,没有遇到break语句,因此继续向下执行,已经有了匹配结果,之后只会输出case中的代码块,输出绿色,直到遇到break语句才会结束分支。
二、循环控制结构
1、while循环
基本语法格式:
while(条件){
循环代码块;
}
说明:若条件为true则执行循环语句,否则结束循环。
举例:计算1!+2!+3!+4!+5!
public class Test1{
public static void main(String[] args){
int a = 5;
int num = 0;
while(a > 0){
int sum = 1;
int n = 1;
while(n <= a){
sum *= n;
n++;
}
a--;
num += sum;
}
System.out.println(num);
}
}
输出结果:
153
注:while循环中也可以嵌套while循环,如上述范例。当while条件为true的时候就会执行循环语句代码块,反之则跳出循环,即结束循环。
2、break和continue
那么我们在使用循环的过程中如果得到了想要得到的结果,但是循环依然继续,这样的代码就不会是最优的,在Java中提供有break关键字和continue关键字,接下来观察范例,总结它们的作用。
范例:观察break的使用
public class Test{
public static void main(String[] args){
int a = 10;
while(a > 0){
if(a == 4){
break;
}
System.out.print(a + ", ");
a--;
}
}
}
输出结果:
10, 9, 8, 7, 6, 5,
通过该代码的执行结果,可以发现当打印到3的时候结束循环。原因是在while循环中加入了判断,当a=4的时候,执行break,直接结束循环,不在输出任何内容。这就是break的功能。既然break是结束循环,那么continue的作用又是什么呢?
范例:观察continue的作用
public class Test{
public static void main(String[] args){
int a = 10;
while(a > 0){
if(a == 4){
a--;
continue;
}
System.out.print(a + ", ");
a--;
}
}
}
输出结果:
10, 9, 8, 7, 6, 5, 3, 2, 1,
通过这个代码,可以发现打印的内容没有4,这个就是执行过程中遇到了continue语句。continue的作用就是结束本次循环,立即进入下一次循环,直到条件为false结束循环。但是需要注意的是如果没有在if中加入a–,就会进入死循环,原因是a的值永远都是4,虽然跳出了本次循环,但是a的值没变,所以一直在进行判断和跳出本次循环操作。
3、for循环
基本语法:
for(表达式1;表达式2;表达式3){
循环体;
}
说明:
表达式1:用于初始化循环变量
表达式2:循环条件
表达式3:更新循环变量
范例:for循环的简单使用
public class Test{
public static void main(String[] args){
for(int i = 1;i < 10;i++){
System.out.print(i + ", ");
}
}
}
输出结果:
1, 2, 3, 4, 5, 6, 7, 8, 9,
for循环也可以结合break或者continue一起使用,达到控制结束循环的效果。
注意事项
表达式1可以放在圆括号外边,表达式3可以放在循环体里边,但是表达式2不可以省略。例:
int i = 1;
for(;i < 10;){
i++;
}
4、do…while循环
使用格式:
do{
循环语句;
}while(循环条件);
说明:先执行循环语句,在判断循环条件,若循环条件为true,则继续下一次执行,若循环条件为false,则结束循环。
例:打印1~10的数字
public class Test{
public static void main(String[] args){
int num = 1;
do{
System.out.print(num + ", ");
num++;
}while(num <= 10);
}
}
输出结果:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
注意事项:do…while循环最后有一个分号不能忘记
但是do…while循环存在局限性,局限性就是先执行循环体。例:打印1~10的数字,不能打印0
public class Test{
public static void main(String[] args){
int num = 0;
do{
System.out.print(num + ", ");
num++;
}while(num <= 10);
}
}
输出结果:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
三、输入输出
1、输出:
System.out.println(msg); //输出一个字符串,并且换行
System.out.print(msg); //输出一个字符串,且不换行
System.out.printf(format,msg); //格式化输出
2、从键盘输入
(1)读入一个字符
示例:
import java.io.IOException;
public class Test{
public static void main(String[] args) {
System.out.print("Enter a Char:");
char i = 0;
try {
i = (char) System.in.read();
} catch (IOException e) {
e.printStackTrace();
}
}
}
输出结果:
Enter a Char:f
(2)使用Scanner读取字符串/整数/浮点数
import java.util.Scanner;
public class Test{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入你的姓名:");
String name = sc.nextLine();
System.out.print("请输入你的年龄:");
int age = sc.nextInt();
System.out.print("请输入你的工资:");
double salary = sc.nextDouble();
System.out.println("信息如下:");
System.out.println("姓名:" + name + "\n年龄:" + age + "\n工资:" + salary);
sc.close();
}
}
输出结果:
请输入你的姓名:张三
请输入你的年龄:22
请输入你的工资:10000
信息如下:
姓名:张三
年龄:22
工资:10000.0
说明:sc.next()和sc.nextLine()的区别:
①sc.next()表示遇到空格就会结束
②sc.nextLine()表示读取一行数据,包括空格
(3)使用Scanner循环读取n个数字
import java.util.Scanner;
public class Test{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double sum = 0.0;
int num = 0;
while(sc.hasNextDouble()){
double tmp = sc.nextDouble();
sum += tmp;
num++;
}
System.out.println("sum = " + sum);
System.out.println("avg = " + sum / num);
sc.close();
}
}
输出结果:
2.0
3.5
7.6
^Z
sum = 13.1
avg = 4.366666666666666
注意:当循环输入多个数据时后结束输入使用Ctrl + Z即可。