1,流程控制语句
在一个程序的执行过程中,各个语句的执行顺序对程序的结果是由直接影响的,也就是说程序的流程对结果有直接影响。所以我们就必须搞清楚每条语句的执行流程,有些时候我们需要通过控制语句的执行顺序来实现我们要完成的功能。
流程控制语句的分类
- 顺序结构
- 选择结构
- 循环结构
2,顺序结构
是程序中最简单最基本的流程控制,没有特定的语法结构,就是按照代码的先后顺序,依次执行。
简单说意思就是写在前面的先执行,后面的后执行
System.out.println("我");
System.out.println("爱");
System.out.println("小");
System.out.println("姐姐");
3,选择结构(分支结构)
有特定的语法规则,代码需要执行具体的逻辑判断,逻辑判断的结果有2个(真或假)。所以就会产生选择,按照不同的选择执行不同的代码
java中有2种选择结构 if语句 switch语句
3.1 if语句
3.1.1 if(关系表达式) {语句体}
if(关系表达式){语句体}
解释(执行流程):
- 先判断关系表达式的结果看是真还是假
- 如果是true,就执行语句体
- 如果是false,就不执行语句体
class Demo7{
public static void main(String[] args){
System.out.println("if语句之前的语句");
if(x == 5)//{//真
System.out.println("x等于5");
System.out.println("x等5");
//}
if(x == 6)//{//假
System.out.println("x等于6");
System.out.println("x等6");
//}
if(x == 7)System.out.println("x等于7");
System.out.println("其他语句");
}
}
注意:
- 关系表达式不论简单还是复杂,结果必须是boolean类型
- if语句体如果只有一条语句,花括号可以省略,如果是多条语句绝对不能省。建议:永远不要省。
- 一般有花括号就不要分号,有分号就不要花括号
class Demo8{
public static void main(String[] args){
int x = 5;
if((x>0)||(x==6)){
System.out.println("x大于0或者等于5");
}
//注意
if(x==5);//这里的语句体是空语句体if(x==5){};
//单独的代码块
{
System.out.println("sdfdsfdsf");
}
}
}
3.1.2 if(关系表达式){语句体一}else{语句体二}
解释(执行流程):
先判断关系表达式的结果看是真还是假
如果是true,就执行语句体一
如果是false,就执行语句体二
import java.util.Scanner;
class Test4{
public static void main(String[] args){
/*
//判断一个数据是奇数还是偶数
Scanner sc = new Scanner(System.in);
System.out.println("输入一个数据:");
int c = sc.nextInt();
if(c%2==0){
System.out.println(c+"是一个偶数");
}else{
System.out.println(c+"是一个奇数");
}
*/
//错误演示
//错误: 不兼容的类型: 条件表达式中的类型错误 void无法转换为int
//: 非法的表达式开始
//void x = (c%2==0)?System.out.println(c+"是一个偶数"):System.out.println(c+"是一个奇数");
//通过键盘输入2个数据,获取较大的那个
Scanner sc = new Scanner(System.in);
System.out.println("输入第一个数据:");
int a = sc.nextInt();
System.out.println("输入第二个数据:");
int b = sc.nextInt();
//定义一个变量用来接收接受较大的数据
int max;
//判断
if(a>b){
max = a;
}else{
max = b;
}
System.out.println("max="+max);
System.out.println("---------------");
//三元的写法
int max2 = (a>b)?a:b;
System.out.println("max2="+max2);
System.out.println("---------------");
/*
三元也是根据判断,给出了2个结果
和我们if语句第二种格式很像,所以他们在某种情况下是可以相互转换的
-if语句的第二种格式和三元运算符
三元运算符的操作都可以用if语句改写,但是if语句不一定都可以用三元来改写
-当if语句中的语句体是一个输出语句的时候就不行。因为三元运算是一个运算符
必须要有一个结果返回,而输出语句不能作为一个结果来返回。
*/
}
}
- 三元,它也是根据判断,给出了2个结果,和我们if语句第二种格式很像,所以他们在某种情况下是可以相互转换的
- if语句的第二种格式和三元运算符
三元运算符的操作都可以用if语句改写,但是if语句不一定都可以用三元来改写 - 当if语句中的语句体是一个输出语句的时候就不行。因为三元运算是一个运算符,必须要有一个结果返回,而输出语句不能作为一个结果来返回。
3.1.3 if(关系表达式一){语句体一}else if(关系表达式二){语句体二 }else{语句体n+1}
if(关系表达式一){
语句体一
}else if(关系表达式二){
语句体二
}else if(关系表达式n){
语句体n
}
.....
else{
语句体n+1
}
- 解释(执行流程):
先判断关系表达式一的结果看是真还是假
如果是真就执行语句体一
如果是假,就继续判断关系表达式二的结果看是真还是假
如果是真就执行语句体二,如果是假就继续判断关系表达式n看是真还是假
如果是真就执行语句体n,如果是假就继续判断
。。。。。
如果没有任何关系表达式成立,就执行语句体n+1
import java.util.Scanner;
class Demo10{
public static void main(String[] args){
//通过键盘输入成绩,判断并输出成绩的等级
/*
85-100 A 优秀
75-85 B 良好
60-75 C 及格
0-60 D 不及格
*/
//创建对象
Scanner sc = new Scanner(System.in);
//提示输入成绩
System.out.println("请输入你的成绩:");
//接受
int score = sc.nextInt();
//判断
/*
if(score>=85 && score<=100){
System.out.println("你真的优秀!!!");
}else if(score>=75 && score<85){
System.out.println("还不错");
}else if(score>=60 && score<75){
System.out.println("恭喜你,及格了。。。");
}else{
System.out.println("完犊子了。没过。。。。");
}
*/
/*
这个代码满足了基本要求,但是别人在用的时候,有可能不会按照要求输入数据。
所以这里我要告诉大家:写代码或者开发的时候一定要考虑几个问题
正确数据, 错误的数据 边界数据
上面的代码没有考虑错误的数据,所以不好,需要改进
*/
/*
if(score>=85 && score<=100){
System.out.println("你真的优秀!!!");
}else if(score>=75 && score<85){
System.out.println("还不错");
}else if(score>=60 && score<75){
System.out.println("恭喜你,及格了。。。");
}else if(score>=0 && score<60){
System.out.println("完犊子了。没过。。。。");
}else{
System.out.println("输入的数据不合法。。");
}
*/
//另一种方式
if(score<0 || score>100){
System.out.println("输入的数据不合法。。");
}else if(score>=85 && score<=100){
System.out.println("你真的优秀!!!");
}else if(score>=75 && score<85){
System.out.println("还不错");
}else if(score>=60 && score<75){
System.out.println("恭喜你,及格了。。。");
}else{
System.out.println("不及格。。。。");
}
}
}
- 三种if语句分别适合干什么?
格式一,适合单个判断
格式二:适合2个判断
格式三;适合多个判断 - if语句使用场景
针对一个范围进行判断
针对一个boolean类型的表达式进行判断
/*
通过键盘输入x的值,根据要求求y的值
x>5 y = 2x+1;
x>0 x<5 y = 2x;
x<0 y = 2x-1;
我们现在是3个判断,需要使用if的第三种格式
*/
import java.util.Scanner;
class Test5{
public static void main(String[] args){
//创建对象
Scanner sc = new Scanner(System.in);
//提示信息
System.out.println("请输入x的值:");
//接受数据
int x = sc.nextInt();
int y;
//判断
if(x>=5){
y = 2*x+1;
}else if(x>0 && x<5){
y = 2*x;
}else{
y = 2*x-1;
}
System.out.println("y="+y);
}
}
```java
/*
获取3个数据中的最大值
if语句是可以嵌套的。
*/
class Demo11{
public static void main(String[] args){
int a = 5;
int b = 3;
int c = 6;
//三元
//int temp = a>b?a:b;
//int max = temp>c?temp:c;
//System.out.println("max="+max);
//if写法
int max;
if(a>b){
if(a>c){
max = a;
}else{
max = c;
}
}else{
if(b>c){
max = b;
}else{
max = c;
}
}
System.out.println("max="+max);
}
}
3.2 switch语句
- 格式:
• switch(表达式){
case 值1:
语句体一;
break;
case 值2:
语句体二;
break;
…
default:
语句体n+1;
break;
}
- 解释(执行流程):
switch表示这是switch语句,表达式的取值:byte short int char (枚举 String);case后面跟的是要和表达式进行比较的值;语句体可以是多条语句; break表示中断,结束的意思,可以结束switch语句;default表示所有的case值都和表达式的值不匹配,就执行default语句
和if语句中的else类似
- 先计算出表达式中的结果,先和case值1进行比较
- 如果相同就执行语句体一,然后执行break跳出switch语句,执行swithc之外的语句
- 如果不同就继续比较case值2
- 如果相同就执行语句体二,然后执行break跳出switch语句,执行swithc之外的语句
… - 如果都不同,就执行default语句体n+1,然后执行break跳出,执行swithc之外的语句
/*
通过键盘输入一个数据(1-7)输出对应的星期
1----星期一
2----星期二
。。。
这个练习可以用if语句,我们现在讲的是switch语句
*/
import java.util.Scanner;
class Demo12{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数(1-7):");
int i = sc.nextInt();
//判断
switch(i){
case 1:
System.out.println("星期1");
break;
case 2:
System.out.println("星期2");
break;
case 3:
System.out.println("星期3");
break;
case 4:
System.out.println("星期4");
break;
case 5:
System.out.println("星期5");
break;
case 6:
System.out.println("星期6");
break;
case 7:
System.out.println("星期天");
break;
default:
System.out.println("输入有误");
break;
}
System.out.println("其他语句");
}
}
- 注意事项:
- case后面是常量,不能用变量
- case后面的值不能出现相同的
- default可以省略,但是不建议,除非判断的值是固定的值
- break也可以不写,但是不建议,因为有可能结果不是我们想要的
- default不一定要在最后,可以在switch中任意位置。但是如果不在最后default中的break不要省,否则结果可能不是我们想要的
- break是switch语句的结束条件,遇到break就结束switch语句,执行其他语句
/*
通过键盘输入一个数据(1-7)输出对应的星期
1----星期一
2----星期二
。。。
这个练习可以用if语句(自己写),我们现在讲的是switch语句
*/
import java.util.Scanner;
class Demo12{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数(1-7):");
int i = sc.nextInt();
//int j = 1;
//判断
switch(i){
/*
//default可以省略,但是不建议省略
default:
System.out.println("输入有误");
break;
*/
case 1:
System.out.println("星期1");
break;
//case j:// 错误: 需要常量表达式
// System.out.println("星期1");
// break;
//case 1: 错误: case 标签重复
case 2:
System.out.println("星期2");
break;
/*
default:
System.out.println("输入有误");
//break;
*/
case 3:
System.out.println("星期3");
break;
case 4:
System.out.println("星期4");
break;
case 5:
System.out.println("星期5");
break;
case 6:
System.out.println("星期6");
break;//可以省略,但是不建议省略
case 7:
System.out.println("星期天");
break;
}
System.out.println("其他语句");
}
}
/*
需求:通过代码编写一个选择题,然后提供对应的ABCD选项
使用键盘输入你的选择
根据选项输出你选择的结果
*/
import java.util.Scanner;
class Demo13{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请选择你最喜欢的水果:");
System.out.println("A(65) 苹果");
System.out.println("B(66) 香蕉");
System.out.println("C(67) 葡萄");
System.out.println("D(68) 西瓜");
/*
问题:我们没有讲过如何通过键盘得到一个字符 A B
我们之前讲过ASCII 表,每一个字符都有一个固定的数值
'A' 65
'a' 97
'0' 48
所以我们可以用数值来替代字符,然后把数字转成字符类型
*/
System.out.println("请输入你的选择:");
int i = sc.nextInt();
//需要把数字转成字符 强制类型转换
char ch = (char)i;
//System.out.println(ch);
switch(i){
case 'A':
System.out.println("最喜欢苹果");
break;
case 'B':
System.out.println("最喜欢香蕉");
break;
case 'C':
System.out.println("最喜欢葡萄");
break;
case 'D':
System.out.println("最喜欢西瓜");
break;
default:
System.out.println("没有喜欢的水果");
break;
}
}
}
/*
通过键盘输入一个字符串,判断是否有对应的,有就输出
String s = sc.nextLine();
*/
import java.util.Scanner;
class Demo14{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入你要判断的字符串:");
//接受用户输入的字符串
String s = sc.nextLine();//111 "111"
switch(s){
case "momo":
System.out.println("momo");
break;
case "is":
System.out.println("is");
break;
case "da":
System.out.println("da");
break;
case "shuaige":
System.out.println("shuaige");
break;
default:
System.out.println("没有找到。。。");
break;
}
}
}
----------------------------------------------------------------------------------------
//需求:我要在控制台上输出10次 我爱你
//我要输出1000次? 100000次?
//目前这种方式很明显不合适
class Demo3{
public static void main(String[] args){
System.out.println("我爱你");
System.out.println("我爱你");
System.out.println("我爱你");
System.out.println("我爱你");
System.out.println("我爱你");
System.out.println("我爱你");
System.out.println("我爱你");
System.out.println("我爱你");
System.out.println("我爱你");
System.out.println("我爱你");
}
}
月份判断
//通过键盘输入月份,输出相应的季节
/*
分析:需要使用Scanner
多个判断,使用if
春天 3 4 5
夏天 6 7 8
秋天 9 10 11
冬天 12 1 2
*/
import java.util.Scanner;
class Demo{
public static void main(String[] args){
//创建键盘输入对象
Scanner sc = new Scanner(System.in);
//提示用户输入月份
System.out.println("请输入一个月份:");
int month = sc.nextInt();
/*
if(month<1 || month>12){
System.out.println("输入有误");
}else if(month == 1){
System.out.println("冬天");
}else if(month == 2){
System.out.println("冬天");
}else if(month == 3){
System.out.println("春天");
}else if(month == 4){
System.out.println("春天");
}else if(month == 5){
System.out.println("春天");
}else if(month == 6){
System.out.println("夏天");
}else if(month == 7){
System.out.println("夏天");
}else if(month == 8){
System.out.println("夏天");
}else if(month == 9){
System.out.println("秋天");
}else if(month == 10){
System.out.println("秋天");
}else if(month == 11){
System.out.println("秋天");
}else if(month == 12){
System.out.println("冬天");
}
*/
/*
if(month<1 || month>12){
System.out.println("输入有误");
}else if(month == 1 || month == 2 || month == 12){
System.out.println("冬天");
}else if(month == 3 || month == 4 || month == 5){
System.out.println("春天");
}else if(month == 6 || month == 7 || month == 8){
System.out.println("夏天");
}else if(month == 9 || month == 10 || month == 11){
System.out.println("秋天");
}
*/
if(month<1 || month>12){
System.out.println("输入有误");
}else if(month >= 3 && month <= 5){
System.out.println("春天");
}else if(month >= 6 && month <= 8){
System.out.println("夏天");
}else if(month >= 9 && month <= 11){
System.out.println("秋天");
}else{
System.out.println("冬天");
}
/*
switch(month){
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;
case 8:
System.out.println("夏天");
break;
case 9:
System.out.println("秋天");
break;
case 10:
System.out.println("秋天");
break;
case 11:
System.out.println("秋天");
break;
case 12:
System.out.println("冬天");
break;
default:
System.out.println("输入有误");
break;
*/
/*
case 1:
case 2:
case 12:
System.out.println("冬天");
break;
case 3:
case 4:
case 5:
System.out.println("春天");
break;
case 6:
case 7:
case 8:
System.out.println("夏天");
break;
case 9:
case 10:
case 11:
System.out.println("秋天");
break;
default:
System.out.println("输入有误");
break;
}
*/
//System.out.println("a="+a);
}
}