您的位置:首页 > 编程语言 > Java开发

南哥带你玩转 Java 之 Java 流程控制

2017-12-29 17:57 197 查看

Java 流程控制

顺序结构

没有流程控制默认是从上到下执行
相当于代码按顺序从上向下依次执行


分支结构

if 语句

if 语句三种书写格式:
格式一:
if(判断条件){
执行体
执行语句1,
...
执行语句 n;
}
如果判断条件成立就执行执行体( if 后面那对大括号中的语句)

格式二:
if(判断条件){
执行体1
} else{
执行体2
}
如果判断条件成立就执行执行体1( if 后面那对大括号中的语句)
反之执行执行体2( else 后面那对大括号中的语句)

格式三:
if(判断条件1){
执行体1
} else if(判断条件2){
执行体2
}
else{
执行体3
}
如果判断条件都不成立,就去执行 else 中的语句

注意:根据具体情况具体分析

例1:
// 输入成绩,判断等级
// 91-100优秀 71-90良好 61-70合格 60以下不合格
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
if(n > 90 && n <= 100) {
System.out.println("优秀");
} else if(n > 70 && n <= 90) {
System.out.println("良好");
} else if(n > 60 && n <= 70) {
System.out.println("合格");
} else if(n > 0 && n <= 60){
System.out.println("不合格");
} else {
System.out.println("非法成绩!");
}

例2:
// 偶数不是7的倍数
if(n % 2 == 0 && n % 7 != 0) {
System.out.println(n);
}

例3:
// 判断闰年
if(n % 400 == 0 || (n % 4 == 0 && n % 100 != 0)) {
System.out.println("闰年");
} else {
System.out.println("平年");
}


if 的嵌套

例如:
// 如果晴天,去爬山,如果下雨,去逛街,小雨的话,带上伞,
// 暴雨的话,穿上雨衣 键盘输入模拟天气
// 如果输入的 下雨的话 还需要提示用户 输入 是小雨 或  暴雨
System.out.println("请输入天气情况(晴天/下雨):");
Scanner scanner = new Scanner(System.in);
String string = scanner.nextLine();
if(string.equals("晴天")) {
System.out.println("去爬山~");
}else if(string.equals("下雨")) {
System.out.println("去逛街~");
System.out.println("请输入小雨或者暴雨:");
string = scanner.nextLine();
if(string.equals("小雨")) {
System.out.println("带上伞!");
} else if (string.equals("暴雨")) {
System.out.println("穿上雨衣!");
}
} else {
System.out.println("输入错误!");
}
scanner.close();


switch 语句

switch的结构:
switch (值 key) {
case value1:
语句体1
break;
case value2:
语句体2
break;
可以有无数个case 根据具体情况分析
default:
语句体3
break;
}
switch的执行
用key(值)和value1进行匹配,匹配上就执行语句体1
没匹配上就继续向下匹配value2,匹配上就执行语句体2
如果都没匹配上,就执行default后面的语句体3

例如:
// 输入一个数 如果是1 打印 春天 2 —> 夏天 3 —> 秋天 4 —> 冬天
System.out.println("请输入一个数:");
Scanner scanner = new Scanner(System.in);
// 接收这个数
int num = scanner.nextInt();
// 使用switch语句
switch (num) {
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都没有匹配上,系统就会寻找当前switch语句中有无default,有就执行,没有就算了
default:
System.out.println("呵呵");
break;// 跳出switch语句
}
scanner.close();

思考:什么时候用switch,什么时候用if?
如果判断是一个区间使用if比较方便
如果是简单的几个数使用switch比较方便


循环结构

while 循环

①
while(判断条件){
②
循环体
}
如果判断条件成立就执行循环体
反之不成立就不执行
执行顺序:
① -> ② -> ①(再去看条件是否成立) -> ② -> ①(如果不成立循环结束)

while 死循环:
//使用while写死循环,打印我是死循环
while (true) {
System.out.println("死循环");
}

例1:
// 打印十遍睡觉
// 定义一个变量记录打印次数
int num = 0;
while (num < 10) {
System.out.println("睡觉");
// 改变num值
num++;// 循环增量
}

例2:
// 打印1-100的数
// 声明循环增量
int number = 1;
// while 循环
while(number <= 100) {
// 打印1-100
System.out.println(number);
// 增量++
number++;
}

例2:
// 计算 1 + 2 + 3 + 4 + 5 + ... + 10  计算和
// 累加思想 利用思想取解决相同类型问题   举一反三的能力
// 循环增量
int number = 0;
// 声明一个变量来保存和
int sum = 0;
// 循环
while (number < 11) {
// 可以拿到1-10这些数
sum = sum + number;
// 增量++
number++;
}
// 打印和
System.out.println(sum);

例3:
// 银行定期存款 5年及以上利率7.5% 否则利率 4.5%
// 10年  本金为10000 计算本金加利息
// 本金
double money = 10000;
// 年份
int year = 1;
while(year < 11) {
// 计算本金加利息
money = money + (money * 0.075);
year++;
}
System.out.println(money);


do…while 循环

do...while 循环
1.写法
do{
①
循环体
} while(循环判断条件);
②

执行规则:
先执行循环体中的内容(不管循环条件成立与否,都会先执行循环体的内容)
再去看循环条件,满足就执行循环体,依次循环
当循环条件不成立时循环结束

2.明确执行顺序 ① -> ② -> ① -> ②

例1:
// 打印10次睡觉
// 注意:循环增量写在 do 的外面,否则,判断时访问不到
int i = 0;
do {
System.out.println("睡觉");
i++;
} while (i < 10);

例2:
// 从周一开始打印 并询问明天上班不 输入上班 继续打印
// 输入不上班 停止程序
// 定义数组:"一","二","三","四","五","六","日"
String week[] =  {"一","二","三","四","五","六","日"};
// 循环增量
int day = 0;
// 创建了一个扫描对象 用来接收从键盘输入的内容
Scanner scanner = new Scanner(System.in);
// 声明一个空字符串
String str = "";
do {
// 当 day 等于7时重新回0
if(day == 7) {
day = 0;
}
System.out.println("今天星期" + week[day] + ",明天上班吗?(上班/不上班)");
// 循环接收上班/不上班
str = scanner.nextLine();
// 增量++
day++;
if (str.equals("不上班")) {
System.out.println("今天星期" + week[day] + ", 不上班!开心吗?");
}
} while (str.equals("上班"));
// 关闭 scanner
scanner.close();


for 循环

1.写法:
for(表达式;判断条件;表达式){
循环体
}
2.执行顺序:
打印10遍睡觉
//        ①      ②     ③
for(int i = 0; i < 10; i++) {
④
System.out.println("睡觉");
}
执行顺序:
① -> ② -> ④ -> ③ -> ② -> ④ -> ③
当判断条件不成立时,结束循环
注意:循环的执行顺序

for 循环的死循环:
for (;;) {
System.out.println("死循环");
}

例1:
// 计算 1-10的和
// 这里定义的循环增量 i 访问范围只在 for 循环的大括号中使用
// 声明变量和
int sum = 0;
for(int i = 0; i < 11; i++) {
// 累加
sum = sum + i;
}
System.out.println(sum);

例2:
// 使用for循环 从1-1000 中 是2的倍数 并且不是10的倍数 的个数  打印个数
// 计数器思想:需要一个变量来记录次数
// 声明记住次数的变量
int sum = 0;
for(int i = 1; i < 1001; i++) {
// 找出是2的倍数,并且不是10的倍数的数
if (i % 2 == 0 && i % 10 != 0) {
// 增量++
sum++;
}
}
// 打印结果
System.out.println(sum);


for 循环的嵌套

执行顺序:
① -> ② -> ④ -> ⑤ -> ⑦ -> ⑥ -> ⑤ -> ⑦ -> ⑥ -> ...
⑧ -> ③ -> ② -> ④ -> ⑤ -> ⑦ -> ⑥ -> ⑤ -> ⑦ -> ⑥ -> ...
①      ②     ③
for (int i = 0; i < 10; i++) {
④      ⑤     ⑥
for (int j = 0; j < 10; j++) {
⑦
System.out.println("睡觉");
}
⑧
System.out.println("醒了");
}
⑨
System.out.println("困");

例1:
// 打印下列图形 使用for循环的嵌套
***
***
***
***
// 规律:
// 外循环控制行数
// 内循环控制每一行有几个元素
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 3; j++) {
System.out.print("*");
}
System.out.println();
}

例2:
// 打印下列图形
*****
****
***
**
*
// 规律:修改内循环 循环增量的初值
for (int i = 0; i < 5; i++) {
for (int j = i; j < 5; j++) {
System.out.print("*");
}
System.out.println();
}

例3:
// 打印下列图形
*
**
***
****
*****

for (int i = 0; i < 5; i++) {
for (int j = 0; j < i + 1; j++) {
System.out.print("*");
}
System.out.println();
}

例4:
// 打印
1
12
123
1234
12345

for (int i = 1; i < 6; i++) {
for (int j = 1; j < i + 1; j++) {
System.out.print(j);
}
System.out.println();
}

例5:
// 打印99乘法表
//      1*1=1
//      1*2=2   2*2=4
//      1*3=3   2*3=6   3*3=9
//      1*4=4   2*4=8   3*4=12  4*4=16
for (int i = 1; i < 10; i++) {
for (int j = 1; j < i + 1; j++) {
System.out.print(j + "*" + i + "=" + i * j + "\t");
//\t:水平制表符,使用水平制表符可以可以使文字内容在规整的位置显示或输出而看起来清晰整齐。
}
System.out.println();
}

例6:
//      -----*
//      ----* *
//      ---* * *
//      --* * * *
//      -* * * * *
// 在什么位置(内循环/外循环)进行拼接
for (int i = 0; i < 5; i++) {
for (int j = i; j < 5; j++) {
System.out.print("-");
}
// 拼接位置
for (int k = 0; k < i + 1; k++) {
System.out.print("* ");
}
System.out.println();
}


break 在循环当中的作用

for (int i = 0; i < 10; i++) {
if (i == 8) {
// 跳出循环(结束循环)
// 注意: break 后面不要写代码永远不会被执行
break;
}
System.out.println(i);
}
System.out.println("循环外");

例如:
// 打印[0, 100]中是7的倍数中的值最大那个数(两种方法 break)
// 第一种:
int max = 0;
for (int i = 0; i < 101; i++) {
if(i % 7 == 0) {
max = i;
}
}
System.out.println(max);

// 第二种:
// 使用 break 可以倒着打印 进到循环中的第一个数就是最大值
for (int i = 100; i > -1; i--) {
// 判断是否是7的倍数
if(i % 7 == 0) {
// 进来的第一个数就是最大值
System.out.println(i);
// 停止循环
break;
}
}

// 死循环时, break 可以当做出口
int num = 0;
while (true) {
if (num == 5) {
//写个出口,结束死循环
break;
}
num++;
System.out.println(num);
}


continue 在循环中的作用

// 测试一下 continue 的作用
for (int i = 0; i < 10; i++) {
if (i == 5) {
// 结束本次循环,继续下一次循环
continue;
}
System.out.println(i);
}

例子:
// 班级12个人 跟每个人打招呼 讨厌的人不打招呼
// 我分别讨厌 3号 5号 9号
// 先完成需求,再考虑代码优化
for (int i = 1; i < 13; i++) {
if (i == 3 || i == 5 || i == 9) {
System.out.println(i + "号不打招呼");
continue;
}
System.out.println(i + "号,你好!");
}


for 循环嵌套中 continue 和 break 的作用

嵌套中: break 结束了本层的循环
continue 跳出这一次的本层循环,继续下一次的本层循环(不会影响到外层循环)
w: for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (j == 6) {
// 如果想在 j 中结束外层循环,给外层循环取个名字
// 在本层中直接写 break w; 即可结束(一般不会用到)
// 同理可以应用到 continue 中
break;
}
System.out.print(j + "  ");
}
if (i == 6) {
break;
}
System.out.println(i + "  ");
}

例子:
// 打印0-9中除2,4,6的数
for (int i = 0; i < 10; i++) {
for (int j = 10; j < 20; j++) {
if (j == 2 || j == 4 || j == 6) {
continue;
}
System.out.println(j);
}
if(i == 2 || i == 4 || i == 6) {
continue;
}
System.out.println(i);
}


http://blog.csdn.net/huzongnan/article/list
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: