在程序中,程序运行的流程控制决定程序是如何执行的,是我们必须掌握的,主要有三大流程控制语句。
1)顺序控制
2)分支控制
3)循环控制
程序从上到下逐行地执行,中间没有任何判断和跳转。
基本语法
if(条件表达式){
执行代码块; (可以有多条语句.)
}
说明: 当条件表达式为ture时,就会执行{ }的代码。如果为false就不执行.
特别说明,如果{}中只有一条语句,则可以不用{}, 但是建议写上{}
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入年龄: ");
int age = sc.nextInt();
if (age >= 18) {
System.out.println("成年人!");
}
}
}
基本语法
if(条件表达式) {
执行代码块1;
else {
执行代码块2;
}
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入年龄: ");
int age = sc.nextInt();
if (age >= 18) {
System.out.println("成年人!");
} else {
System.out.println("未成年~");
}
}
}
基本语法
if (条件表达式1) {
执行代码块1;
}
else if (条件表达式2) {
执行代码块2;
else{
执行代码块n;
}
1.当条件表达式1成立时,即执行代码块1,
2.如果表达式1不成立,才去判断表达式2是否成立,
3.如果表达式2成立,就执行代码块2
4.以此类推,如果所有的表达式都不成立
5.则执行else的代码块,注意,只能有一个执行入口。
输入保国同志的芝麻信用分 ------------------ 如果:
1.信用分为100分时,输出信用极好;
2.信用分为(80, 99]时,输出信用优秀;
3.信用分为[60,80]时,输出信用一般;
4.其它情况,输出信用不及格;
5.请从键盘输入保国的芝麻信用分,并加以判断
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入芝麻信用分: ");
int score = sc.nextInt();
if (score >= 100) {
System.out.println("信用极好");
} else if (score > 80) {
System.out.println("信用优秀");
} else if (score >= 60) {
System.out.println("信用一般");
} else {
System.out.println("信用不及格");
}
}
}
在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支的结构称为内层分支外面的分支结构称为外层分支。
老师建议:不要超过3层(可读性不好)
if(){
if(){
//if-else....
}else{
//if-else
}
}
案例演示
参加歌手比赛,如果初赛成绩大于8.0进入决赛,否则提示淘汰。并且根据性别提示进入男子组或女子组。[可以让学员先练习下] ,输入成绩和性别,进行判断和输出信息。
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入歌手成绩: ");
double score = sc.nextDouble();
if (score > 8.0) {
System.out.println("请输入性别:");
char gender = sc.next().charAt(0);
if (gender == '男') {
System.out.println("♂");
} else if (gender == '女') {
System.out.println("♀");
}
} else {
System.out.println("被淘汰了😅");
}
}
}
基本语法
switch(表达式){
case 常量1: //当...
语句块1;
break;
case 常量2;
语句块2;
break;
case 常量n;
语句块n;
break;
default:
default语句块;
break;
}
请编写一个程序,该程序可以接收一个字符,比如:a,b,c,d,e,f,g
a表示星期一,b表示星期二…
根据用户的输入显示相依的信息要求使用switch语句完成
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入: ");
char c = sc.next().charAt(0);
switch (c) {
case 'a':
System.out.println("Monday");
break;
case 'b':
System.out.println("Tuesday");
break;
case 'c':
System.out.println("Wednesday");
break;
}
}
}
switch注意事项和细节讨论
例题
根据用于指定月份,打印该月份所属的季节。3,4,5 春季 6,7,8夏季 9,10,11秋季 12,1,2冬季[课堂练习,提示使用穿透]
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入月份: ");
int month = sc.nextInt();
switch (month) {
case 3:
case 4:
case 5:
System.out.println("Spring");
break;
case 6:
case 7:
case 8:
System.out.println("Summer");
break;
case 9:
case 10:
case 11:
System.out.println("Autumn");
break;
case 12:
case 1:
case 2:
System.out.println("Winter");
break;
default:
System.out.println("Wrong Month [1-12]");
}
}
}
基本介绍:听其名而知其意就是让你的代码可以循环的执行.
基本语法
for (循环变量初始化;循环条件;循环变量迭代) {
循环操作(可以多条语句);
}
➢老韩说明
public class Test {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
System.out.println("你好, 红烧肉");
}
}
}
注意事项和细节说明
循环条件是返回一个布尔值的表达式
for(;循环判断条件;)中的初始化和变量迭代可以写到其它地方,但是两边的分号不能省略。
int i = 1;
for (; i <= 10; ) {
System.out.println("你好, 红烧肉" + i);
i++;
}
for (; ; ) {
System.out.println("死循环,可以结合break用");
}
循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开,
循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开。
使用内存分析法,分析输出下面代码输出什么?
int count = 3;
for (int i = 0, j = 0; i < count; i++, j += 2) {
System.out.println("i=" + i + "\t j=" + j);
}
i=0 j=0
i=1 j=2
i=2 j=4
基本语法
循环变量初始化;
while(循环条件){
循环体(语句);
循环变量迭代;
}
while循环也有四要素, 只是四要素放的位置,不一样.
int i = 1;
while (i < 11) {
System.out.println("丘丘人\t" + i);
i++;
}
注意事项和细节说明
循环条件是返回一个布尔值的表达式
while循环是先判断再执行语句
基本语法
循环变量初始化;
do{
循环体(语句);
循环变量迭代;
}while(循环条件);
说明:
int i = 1;
do {
System.out.println("丘丘人\t" + i);
i++;
} while (i < 11);
1 将一个循环放在另一个循环体内,就形成了嵌套循环。其中,for ,while ,do…while均可以作为外层循环和内层循环。[建议一 般使用两层,最多不要超过3层,否则,代码的可读性很差]
2 实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为false时,才会完全跳出内层循环,才可结束外层的当次循环,开始下一次的循环[听不懂,走案例]。
3 设外层循环次数为m次,内层为n次,则内层循环体实际上需要执行m*n次。
打印出九九乘法表
public class Test {
public static void main(String[] args) {
for (int i = 1; i < 10; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(i + "×" + j + "=" + i * j + "\t");
}
System.out.println();
}
}
}
打印出空心金字塔
使用for循环完成下面的案例
请编写一个程序,可以接收一个整数,表示层数 (totalLevel) ,打印出金字塔。
public class Test {
public static void main(String[] args) {
int totalLevel = 5;
for (int t = 1; t < totalLevel; t++) {
//1 先输出边上的空格
for (int temp1 = 0; temp1 < totalLevel - t; temp1++) System.out.print(" ");
//2 输出一个*
System.out.print("*");
//3 判断条件, 输出空格
if (2 * t - 3 < 0) {
System.out.println();
continue;
} else {
for (int temp2 = 0; temp2 < 2 * t - 3; temp2++) System.out.print(" ");
}
//4 再输出一个*
System.out.print("*");
//5 输出空格,输不输出都一样
//6 换行
System.out.println();
}
for (int temp = 0; temp < totalLevel * 2 - 1; temp++) System.out.print("*");
}
}
随机生成1- 100的一个数,直到生成了97这个数,看看你一共用了几次?
public class Test {
public static void main(String[] args) {
while (true) {
double r = Math.random();
int r_int = (int) (r * 100);
System.out.println(r_int);
if (r_int == 77) break;
}
}
}
注意事项和细节说明:
1 break语句出现在多层嵌套的语句块中时,可以通过标签指明要终止的是哪一层语句块.
2 标签的基本使用
label1: {......
label2: {......
label3: {
......
break label2;
......
}
}
}
(1) break语句可以指定退出哪层
(2) label1是标签,由程序员指定。
(3) break后指定到哪个label就退出到哪里
(4) 在实际的开发中,尽量不要使用标签.
(5) 如果没有指定break,默认退出最近的循环体
public class Test {
public static void main(String[] args) {
lable1:
for (int i = 0; i < 4; i++) {
lable2:
for (int j = 0; j < 10; j++) {
if (j == 2) {
break lable1;
}
System.out.println("i= " + i + "\tj=" + j);
}
}
}
}
1-100以内的数求和,求出当和第一次大于20的当前数
public class Test {
public static void main(String[] args) {
int sum = 0;
int i = 1;
for (; i < 101; i++) {
sum += i;
if (sum > 20) {
System.out.println("和大于20时, i=" + i);
break;
}
}
}
}
基本介绍:
public class Test {
public static void main(String[] args) {
int i = 0;
while (i <= 4) {
i++;
if (i == 2) {
continue;
}
System.out.println("i=" + i);
}
}
}
public class Test {
public static void main(String[] args) {
lable1:
for (int i = 0; i < 4; i++) {
lable2:
for (int j = 0; j < 10; j++) {
if (j == 2) {
continue lable1;
}
System.out.println("i= " + i + "\tj=" + j);
}
}
}
}
return使用在方法,表示跳出所在的方法,在讲解方法的时候,会详细的介绍,这里我们简单的提一下。注意:如果return写在main方法,退出程序.
public class Test {
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
if (i == 3) {
System.out.println("纳西妲\t" + i);
return;//continue; break;
}
System.out.println("Hel1o World!");
}
System.out.println("go on. .");
}
}
1 编程实现如下功能
某人有100,000元,每经过一次路口, 需要交费,规则如下:
1)当现金> 50000时,每次交5%
2)当现金< = 50000时,每次交1000
编程计算该人可以经过多少次路口,要求:使用while break方式完成
public class Test {
public static void main(String[] args) {
int times = 0;
double rmb = 100000;
while (rmb >= 1000) {
if (rmb > 50000) {
rmb = 0.95 * rmb;
} else {
rmb -= 1000;
}
times++;
}
System.out.println("经过了 " + times + "次路口");
}
}
2 实现判断一个整数,属于哪个范围: 大于0;小于0;等于0
3 判断一个年份是否为闰年
4 判断一个整数是否是水仙花数,所谓水仙花数是指一个3位数,其各个位上数字立方和等于其本身。例如: 153 = 1 × 1 × 1 + 3 × 3 × 3 + 5 × 5 × 5 153 = 1×1×1 + 3×3×3 + 5×5×5 153=1×1×1+3×3×3+5×5×5
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
// 判断一个整数是否是水仙花数,所谓水仙花数是指一个3位数,其各个位上数字立方和等于其本身
Scanner sc = new Scanner(System.in);
System.out.println("请输入数字: ");
int num = sc.nextInt();
// 获得 个十百 分位数字
int high = num / 100;
int middle = (num / 10) % 10;
int low = num % 10;
if (num == (Math.pow(low, 3) + Math.pow(middle, 3) + Math.pow(high, 3))) {
System.out.println("是水仙花数!");
}
}
}
6 输出1-100之间的不能被5整除的数,每5个一行
public class Test {
public static void main(String[] args) {
// 输出1-100之间的不能被5整除的数,每5个一行
int newLineTag = 0;
for (int i = 1; i <= 100; i++) {
if (i % 5 != 0) {
newLineTag++;
System.out.print(i + "\t");
if (newLineTag % 5 == 0) System.out.println();
}
}
}
}
7 输出小写的a-z以及大写的Z-A
8 求出 1 − 1 / 2 + 1 / 3 − 1 / 4 + . . . − 1 / 100 1-1/2+ 1/3-1/4+...-1/100 1−1/2+1/3−1/4+...−1/100的和
9 求 1 + ( 1 + 2 ) + ( 1 + 2 + 3 ) + ( 1 + 2 + 3 + 4 ) + . . . + ( 1 + 2 + 3 + . . . + 100 ) 1+ (1+2) + (1+2+3) + (1+2+3+4) +...+(1 +2+3+...+100) 1+(1+2)+(1+2+3)+(1+2+3+4)+...+(1+2+3+...+100)的结果
public class Test {
public static void main(String[] args) {
// 求1+ (1+2) + (1+2+3) + (1+2+3+4) +...+(1 +2+3+...+100)的结果
int sum = 0;
for (int i = 1; i <= 100; i++) {
for (int j = 1; j <= i; j++) {
sum += j;
}
}
System.out.println("sum= " + sum);
}
}