分支结构
分类
-
if语句
-
if else
-
if else if else
-
-
switch语句
if 语句
if( #布尔表达式 ){
#执行的操作 ;
}
如果为true,执行操作 如果为false,不执行操作
if else
if( #布尔表达式 ){
#执行操作1 ;
}else{
#执行操作2 ;
}
如果为true 执行操作1 如果为false 执行操作2
else if 同理 第一个表达式为false 进入else if第二个表达式判断
switch
switch (表达式) {
case 常量1:
语句体1;
break;
case 常量2:
语句体2;
break;
case 常量3:
.......
default:
语句体n+1;
break;
}
如果和常量1不匹配,那么就判断是否和常量2匹配,如果匹配就执行语句体2
break, switch语句跳出运行 直接结束
if 和 switch 的区别
相同点 它俩都可以表达分支结构
不同点
1、if语句格式相对灵活,switch语句相对弱小。所有的switch语句都可以被if语句替代。
2、if语句更多的是做一些连续性区间值的判断 ,画一个范围判断 ,而switch语句无法做到
3、if语句每次都需要获取表达式的值,而switch只获取一次表达式的值,所以switch的效率较高一些。
循环结构
用来简化需要重复执行的,相同或者相似的语句
分类
-
for
-
while
-
do...while语句
for语句
for (int i = 0 (1); i < 5 (2); i++ (3)) {
循环体语句 (4);
}
执行顺序 1243 243 243 ... 2 判断条件不符 退出循环
练习 猜数字小游戏
后台预先生成一个随机数1-100 用户键盘录入猜数字
根绝猜测的结果分别打印 "猜大了" "猜小了" "猜中了"
直到5次机会用尽 "没机会了"
public static void main(String[] args) {
// 系统产生一个1-100之间的随机数
Random r = new Random();
// 获取随机数
int number = r.nextInt(100)+1;// 生成1-100的随机数
boolean isGuess = false;
System.out.println("随机数是" + number);
// 键盘录入我们要猜的数据
for (int i = 0; i < 5; i++) {
Scanner input = new Scanner(System.in);
System.out.println("请输入一个数字:");// 接收数据
int guessNumber = input.nextInt();
// 比较这两个数据
if (guessNumber > number) {
System.out.println("猜大了");
} else if (guessNumber < number) {
System.out.println("猜小了");
} else {
System.out.println("恭喜你猜中了!");
isGuess = true;
break;
}
}
if (isGuess == false) {
System.out.println("5次机会用完了");
}
}
while语句
while(条件表达式) {
循环体语句;
初始化变量的自增;
}
当表达式成立,进入循环,运行到最后 变量自增 重新进入条件表达式判断
do while语句
初始化语句;
do {
循环体语句;
初始化变量的自增;
} while (循环条件表达式);
先执行一次循环 然后开始判断表达式是否成立 若成立重新进入循环
三者区别
while和do while区别:
-
while先判断 后执行,do while 先执行,后判断
-
do while语句至少可以执行一次,另外两种有可能一次都执行不了
while/do while和for区别
-
while/do while一般用于描述相对模糊的范围,不确定循环次数
-
for用于描述相对准确,知道循环次数的循环
跳转语句
break语句:退出循环
循环录入某学生5门课的成绩并计算平均分,如果某分数录入为负,停止录入并提示录入错误
int sum = 0; // 成绩之和
double avg = 0.0; // 平均分
Scanner input = new Scanner(System.in);
System.out.print("输入学生姓名: ");
String name = input.next();
for (int i = 0; i < 5; i++) {
System.out.print("请输入5门功课中第" + (i + 1) + "门课的成绩: ");
int score = input.nextInt(); // 录入成绩
if(score<0) {
System.out.println("您输入的成绩为负值 程序被迫中止");
break;
}
sum = sum + score; // 计算成绩和
}
avg = (double) sum / 5; // 计算平均分
System.out.println(name + "的平均分是:" + avg);
continue语句:结束本次循环,继续下次循环
计算成绩>80分的学员人数以及比例
Scanner input = new Scanner(System.in);
System.out.print("请输入学生人数");
int ren = input.nextInt();
int renshu = 0;
for (int i = 1; i <= ren; i++) {
System.out.print("请输入第" + i + "名学生的成绩");
int score = input.nextInt();
if (score > 80) {
renshu++;
}
else {
continue;
}
System.out.println("成绩大于80分的有" + renshu + "人");
System.out.println("占所有人数的" + (renshu / ren));
循环嵌套
for循环里再添for循环
绘制 用#组成的三角形
for (int i = 0; i < 5; i++) {
for (int j = 0; j <= i; j++) {
System.out.print("#");
}
System.out.println();
}