java流程控制语句
不论哪一种编程语言,都会提供两种基本的流程控制结构:分支结构和循环结构。其中分支结构用于实现根据条件来选择性地执行某段代码,循环结构则用于实现根据循环条件重复执行某段代码。
一、顺序结构
任何编程语言中最常见的程序结构就是顺序结构。顺序结构就是程序从上到下逐行地执行,中间没有任何判断和跳转。如果main方法的多行代码之间没有任何流程控制,则程序总是从上向下依次执行,排在前面的代码先执行,排在后面的代码后执行。
public static void main(String[] args) {
//顺序执行,根据编写的顺序,从上到下运行
System.out.println(1);
System.out.println(2);
System.out.println(3);
}
public static void main(String[] args) {
//这里变量取什么名,下面就用什么.
// 例如:这里取名input,下面就用input.
java.util.Scanner input = new java.util.Scanner(System.in);
System.out.print("请输入姓名:");
String name = input.next();
System.out.print("请输入年龄:");
int age = input.nextInt();
System.out.print("请输入性别:");
//input.next()得到字符串,不管你输入几个字符,
// .charAt(0):从字符串中取出一个字符,(0)表示取第一个字符,(1)表示取第二个字符
// charAt(index):也是一个方法,从第二个单词开始首字母大写,所以A是大写
char gender = input.next().charAt(0);
System.out.print("请输入体重:");
double weight = input.nextDouble();
System.out.print("请输入是否已婚(true/false):");
boolean isMarry = input.nextBoolean();
System.out.println("姓名:" + name);
System.out.println("年龄:" + age);
System.out.println("性别:" + gender);
System.out.println("体重:" + weight);
System.out.println("婚否:" + (isMarry ? "是" : "否"));
}
二、分支结构
if语句
第一种格式:
if(条件表达式){
语句体;
}
执行流程
首先判断条件表达式看其结果是true还是false
如果是true就执行语句体
如果是false就不执行语句体
第二种格式:
if(关系表达式) {
语句体1;
}else {
语句体2;
}
执行流程
首先判断关系表达式看其结果是true还是false
如果是true就执行语句体1
如果是false就执行语句体2
第三种格式:
if (判断条件1) {
执行语句1;
} else if (判断条件2) {
执行语句2;
}
...
}else if (判断条件n) {
执行语句n;
} else {
执行语句n+1;
}
执行流程
首先判断关系表达式1看其结果是true还是false
如果是true就执行语句体1,然后结束当前多分支
如果是false就继续判断关系表达式2看其结果是true还是false
如果是true就执行语句体2,然后结束当前多分支
如果是false就继续判断关系表达式…看其结果是true还是false
…
如果没有任何关系表达式为true,就执行语句体n+1,然后结束当前多分支。
例:
public static void main(String[] args) {
int score = 89;
if (score < 0 || score > 100) {
System.out.println("你的成绩是错误的");
} else if (score >= 90 && score <= 100) {
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("你的成绩属于及格");
} else {
System.out.println("你的成绩属于不及格");
}
}
第四种:if…else嵌套
在if的语句块中,或者是在else语句块中, 又包含了另外一个条件判断(可以是单分支、双分支、多分支)
执行的特点:
(1)如果是嵌套在if语句块中的 只有当外部的if条件满足,才会去判断内部的条件
(2)如果是嵌套在else语句块中的 只有当外部的if条件不满足,进入else后,才会去判断内部的条件
public static void main(String[] args) {
int score = 89;
if (score < 0 || score > 100) {
System.out.println("你的成绩是错误的");
} else {
if (score >= 90) {
System.out.println("你的成绩属于优秀");
} else if (score >= 80) {
System.out.println("你的成绩属于好");
} else if (score >= 70) {
System.out.println("你的成绩属于良");
} else if (score >= 60) {
System.out.println("你的成绩属于及格");
} else {
System.out.println("你的成绩属于不及格");
}
}
}
switch选择结构
语法格式:
switch(表达式){
case 常量值1:
语句块1;
break;
case 常量值2:
语句块2;
break;
...
default:
语句块n+1;
break;
}
执行过程:
-
(1)入口
- ①当switch(表达式)的值与case后面的某个常量值匹配,就从这个case进入;
- ②当switch(表达式)的值与case后面的所有常量值都不匹配,寻找default分支进入;不管default在哪里
-
(2)一旦从“入口”进入switch,就会顺序往下执行,直到遇到“出口”,即可能发生贯穿
-
(3)出口
- ①自然出口:遇到了switch的结束}
- ②中断出口:遇到了break等
注意:
(1)switch(表达式)的值的类型,只能是:4种基本数据类型(byte,short,int,char),两种
引用数据类型(JDK1.5之后枚举、JDK1.7之后String)
(2)case后面必须是常量值,而且不能重复
public static void main(String[] args) {
//定义指定的星期
int weekday = 5;
//switch语句实现选择
switch (weekday) {
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;
}
}
三、循环语句
for循环
循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复执行这个循环体时,需要通过修改循环变量使得循环判断条件为false,从而结束循环,否则循环将一直执行下去,形成死循环。
for循环语句格式:
for(初始化语句①; 循环条件语句②; 迭代语句④){
循环体语句③
}
for(;;){
循环体语句块;//如果循环体中没有跳出循环体的语句,那么就是死循环
}
public static void main(String[] args) {
for(int x = 1; x <= 10; x++) { System.out.println("HelloWorld"+x);
}
}
while循环
while循环语句标准格式:
while (循环条件语句①) {
循环体语句②;
}
while(true){
循环体语句;//如果此时循环体中没有跳出循环的语句,也是死循环
}
//注意:
//while(循环条件)中循环条件必须是boolean类型
执行流程:
-
第一步:执行循环条件语句①,看循环条件语句的值是true,还是false;
- 如果是true,执行第二步;
- 如果是false,循环语句中止,循环不再执行。
-
第二步:执行循环体语句②;
-
第三步:循环体语句执行完后,重新从第一步开始再执行一遍
/**
* 世界最高山峰是珠穆朗玛峰,它的高度是8844.43米,假如我有一张足够大的纸,它的厚度 是0.1毫米。
* * 请问,我折叠多少次,可以折成珠穆朗玛峰的高度?
*/
public class WhileTest01 {
public static void main(String[] args) {
//定义一个计数器,初始值为0
int count = 0;
//定义纸张厚度
double paper = 0.1;
//定义珠穆朗玛峰的高度
int zf = 8844430;
//因为要反复折叠,所以要使用循环,但是不知道折叠多少次,这种情况下更适合使用 while循环
// 折叠的过程中当纸张厚度大于珠峰就停止了,因此继续执行的要求是纸张厚度小于珠峰高 度
while (paper <= zf) {
//循环的执行过程中每次纸张折叠,纸张的厚度要加倍
paper *= 2; //在循环中执行累加,对应折叠了多少次
count++;
}
//打印计数器的值
System.out.println("需要折叠:" + count + "次");
}
}
break关键字
使用场景:终止switch或者当前循环
在选择结构switch语句中
在循环语句中
离开使用场景的存在是没有意义的
public static void main(String[] args) {
java.util.Scanner input = new java.util.Scanner(System.in);
int positive = 0;
int negative = 0;
while (true) {
System.out.print("请输入整数(0)结束:");
int num = input.nextInt();
if (num == 0) {
break;
} else if (num > 0) {
positive++;
} else {
negative++;
}
}
System.out.println("正数:" + positive + ",负数:" + negative);
}
continue关键字
使用场景:结束本次循环,继续下一次的循环
public static void main(String[] args) {
//打印1-100之间的整数,跳过7的倍数和7结尾的数
for (int i = 1; i <= 100; i++) {
if (i % 7 == 0 || i % 10 == 7) {
continue;
//break;
}
System.out.println(i);
}
}
嵌套循环
嵌套循环,是指一个循环的循环体是另一个循环。比如for循环里面还有一个for循环,就是嵌套循环。总共的循环次数=外循环次数*内循环次数。当然可以是三种循环任意互相嵌套。
//打印5行5列矩形
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
System.out.print("*");
}
System.out.println();
}
}