主要的三大流程控制语句
1、顺序控制
2、分支控制
3、循环控制
1、顺序控制
程序从上到下逐行的执行,中间没有任何的判断和跳转;
Java中定义变量时采用合法的前向引用
变量先定义后使用
2、分支控制if-else
单分支
基本语法:
if(条件表达式){
执行代码块;(可以有多条语句)
}
说明:当条件表达式为真(true)的时候,就会执行代码块里面的代码,如果为假(false),就不执行;
//单分支语句
Scanner My_Scanner = new Scanner(System.in);
System.out.println("请输入年龄:");
int age = My_Scanner.nextInt();
if (age > 18){
System.out.println("你"+age+"岁了"+"你成年了!!");
}
双分支
基本语法:
if(条件表达式){
执行代码块1;
}else{
执行代码块2;
}
说明:当条件表达式成立时,即立即执行代码块1,否则执行代码块2;
// 多分支语句
System.out.println("请输入你的成绩:");
double grade = My_Scanner.nextDouble();
if (grade >= 60){
System.out.println("你考了"+grade+"分"+"没有挂科!!");
}else{
System.out.println("你考了"+grade+"分"+"挂科了!!");
}
多分支
基本语法
if(条件表达式){
执行代码块1;
}else if (条件表达式2;){
执行代码块2;
}
......
else{
执行代码块n;
}
说明:当条件表达式1成立时,即立即执行代码块1,
如果代码块1不成立,才去判断表达式2是否成立,
如果表达式2成立,就立即执行代码块2,以此类推,
如果所有表达式都不成立,则执行else代码块;
多分支可以没有else;
// 多分支练习
System.out.println("请输入你的信用分数(1-100):");
double grade = My_scanner.nextDouble();
if(grade >= 1 && grade <= 100){
if(grade == 100){
System.out.println("信用极好!!");
} else if (grade > 80 && grade <= 99) {
System.out.println("信用优秀!!");
}else if (grade >= 60 && grade <= 80){
System.out.println("信用一般!!");
}else{
System.out.println("信用不及格!!");
}
}else{
System.out.println("请正确输入1-100的信用分!!");
}
嵌套分支
在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支结构称为内层分支外面的分支结构称为外层分支。规定:不要超过3层(可读性不好)
基本语法:
if(){
if(){
}else{
}
}
// 嵌套分支练习
System.out.println("请输入你的成绩:");
double score = My_scanner.nextDouble();
if(score > 8.0){
System.out.println("恭喜你进入决赛!!");
System.out.println("请输入你的性别:");
char gender = My_scanner.next().charAt(0); // 新接受到字符串,在取出到字符串的第一个字符
if(gender == '男'){
System.out.println("进入男子组!!");
}else if(gender == '女'){
System.out.println("进入女子组!!");
}else{
System.out.println("你的性别输入有错误!!");
}
}else{
System.out.println("不好意思,你被淘汰了!!");
}
switch分支结构
基本语法:
switch(表达式){
case 常量1:
语句1;
break;
case 常量2:
语句2;
break;
......
default:
default语句块;
break;
}
表达式对应一个值,case常量1:当表达式的值等于常量1时,执行语句块1
break:表示退出swtich
如果没有匹配到常量1,就匹配常量2,如果一个都没有匹配上,就默认执行default;
// switch
//编写一个程序,该程序可以接受一个字符,比如:a,b,c,d,e,f,g
//a表示星期一,b表示星期二,.......
System.out.println("请输入a,b,c,d,e,f,g:");
char day = My_scanner.next().charAt(0);
switch (day){
case 'a':
System.out.println("今天是星期一!!");
break;
case 'b':
System.out.println("今天是星期二!!");
break;
case 'c':
System.out.println("今天是星期三!!");
break;
case 'd':
System.out.println("今天是星期四!!");
break;
case 'e':
System.out.println("今天是星期五!!");
break;
case 'f':
System.out.println("今天是星期六!!");
break;
case 'g':
System.out.println("今天是星期日!!");
break;
default:
System.out.println("请正确输入字符!!");
}
switch细节:
1、表达式的数据类型和case后面的类型一致,或者可以自动转换可以相互比较的类型;
2、switch(表达式)中表达式的返回值必须是:(byte,short,int,char,enum,String)
3、case字句里面的值必须是常量,而不能是变量;
4、default字句是可选的,当没有匹配到case时,执行default;
5、break语句用来在执行完一个case分支后使程序跳出switch语句;如果没有写break,程序会顺序执行switch结尾;
switch 和 if的比较:
如果判断的具体数值不多,而且符合byte,short,int,char,enum(枚举),String这6种类型,虽然这两个语句都可以用,建议使用switch语句;
其他情况:对区间判断,对结果为boolean类型判断,而使用if,if的使用范围更广;
3、for循环控制
基本语法:
for(循环变量初始化;循环条件;循环变量迭代){
循环操作(语句);
}
for 有四要素:
(1)循环变量初始化;
(2)循环条件;
(3)循环操作;
(4)循环变量迭代;
for 循环细节:
1、循环条件是返回布尔值得表达式
2、for(循环判断条件)中得初始化和变量迭代可以写到其他地方,但是两边的分号不能省略
for(;;){
//表示无限循环
}
3、循环初始值可以有多条初始化语句,到要求类型一样,并且中间用逗号隔开,循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开
// for 循环练习
// 打印1~100之间所有是9的倍数的整数,统计个数和总和
int count = 0;
int sum = 0;
for(int i = 1; i <= 100; i++){
if(i % 9 == 0){
sum = i + sum;
count ++;
}
}
System.out.println("一共有:"+count+"个");
System.out.println("和:"+sum);
// 输出:一共有:11个
和:594
4、while 循环控制
基本语法:
循环变量初始化;
while(循环条件){
循环体语句;
循环变量迭代;
}
while循环也要有四要素
只是四要素放的位置不一样
//while练习
// 打印1~100之间所有能被3整除的数
int i = 1;
while(i <= 100){
if(i % 3 == 0){
System.out.println(i);
}
i++;
}
// 打印40~200之间的所有偶数
int j = 40;
while (j < 200){
if (j % 2 == 0){
System.out.println(j);
}
j++;
}
5、do...while循环控制
基本语法:
循环变量初始化;
do{
循环体(语句);
循环变量迭代;
}while(循环条件);
说明:
1、do...while是关键字;
2、也要有循环四要素,只是位置不同;
3、先执行,在判断,也就是说一定会执行一次;
4、最后有一个分号;
// 打印出1~100之间能被5整除但不能被3整除的数,并求出他的个数
int k = 1;
int count = 0;
do{
if (k % 5 == 0 && k % 3 != 0) {
System.out.println(k);
count++;
}
k++;
}while (k <= 200);
System.out.println("一共有"+count);
6、多重循环控制
介绍
1、将一个循环放在另一个循环体内,就形成了嵌套循环。
2、实际上,嵌套循环就是把内层循环当成外层循环的循环体,当只有内层循环的循环条件为false时,才会完全跳出内层循环,才可以结束外层的当次循环,开始下一次的循环。
// 九九乘法表
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(j + "*" + i + "=" + (i * j)+"\t");
}
System.out.println("");
}
7、跳转控制语句-break语句
随机生成一个1~100的随机数
Math.random()生成一个大于等于0小于1的随机小数;
(int)(Math.random()*100)+1
基本语法:
break语句用于终止某一语句块的执行,一般使用在switch或者循环[for,while,do-while]中;
基本语法:
{......
break;
.......
}
基本语法:
break语句用于终止某一语句块的执行,一般使用在switch或者循环[for,while,do-while]中;
基本语法:
{......
break;
.......
}
基本语法:
break语句用于终止某一语句块的执行,一般使用在switch或者循环[for,while,do-while]中;
基本语法:
{......
break;
.......
}
break细节:
1、break语句出现在多层嵌套的语句块中时,可以通过标签指明要终止的是哪一层语句块;
2、标签的基本使用:
label1:{
label2: {
label3: { break label1;
}
}
}
(1) break语句可以指定退出哪一层;
(2)label1是标签,名字是程序员指定;
(3)break后指定哪个label就退出到哪里;
(4)如果没有指定break;默认退出最近的循环体;
8、跳转控制语句-continue语句
基本介绍:
(1)continue语句用于结束本次循环,继续执行下一次循环;
(2)continue语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环,这个和前面的标签的使用规则一样;
基本语法:
{...
continue;
...}
9、跳转控制语句-return语句
介绍:
return使用在方法,表示跳出所在方法,如果用在主方法(main)就是跳出程序了;
字符串的比较
推荐: 具体值放在前面,防止空指针;
equals()方法
String name = "张三";
if("张三".equals(name)){
System.out.println("oooo")
}