流程控制
目录:
顺序结构
分支
循环
循环嵌套
控制循环的关键词
总会出现一种场景:要满足某个条件时,才去做一件事情。 —分支
也有另外一种场景:重复做一个事情,直到满足某个条件才会停下来。 —循环
编程就是把一些人类不愿意干、干起来很乏味的事情,告诉计算机去做
流程控制一共有 3 种结构:
A. 顺序结构。如果没有流程控制,计算机总是从上到下,依次执行每一行。
B. 分支。满足某个条件时,才去执行代码。
C. 循环。重复一段代码。
分支:if 、 switch
if 语句
3 种语法:
第一种语法格式:
if( 返回 boolean 的表达式)
{
// 要做的事情
}
第二种语法格式:
if( 返回 boolean 的表达式)
{
// 要做的事情
}
else
{
// 要做的事情
}
第三种语法格式:
if ( 返回 boolean 的表达式)
{
// 要做的事情
}
else if ( 返回 boolean 的表达式) // else if 可出现 0~N 次
{
}
else // else 可出现 0~1 次
{
// 要做的事情
}
2 个注意点:
A. 如果条件执行体只有一行代码,Java 允许省略条件执行体的花括号。
规则:如果省略了花括号,if 条件只控制到第一个分号(;)前面
建议:即使条件执行体只有一行代码,也包括花括号。
B. else 本身就是条件
当我们有多个 else if 块时,
建议:先处理范围小的条件。
switch语句
当等于某个值时,才执行一段代码
只有在 JDK 7 里,表达式的值才能 String
switch( 返回值是 byte 、short、char、int 或 String 或 枚举的表达式)
{
case 值 1: // case 块可以出现 1~N 次
// 要做的事情
break;
case 值 2:
// 要做的事情
break;
case 值 3:
// 要做的事情
break;
default: // 当表达式的值与前面所有 case 块的值都不相等时,才会执行。
// 要做的事情
}
注意点: 省略 break 后的注意点 // 笔试题 会考!!!!!!!!!!!!!
省略 break 后的执行流程,拿 switch 表达式的值,依次与每个 case 块的值进行比较。
当遇到一个相等的值后,将直接执行所有的执行性代码,
在遇到 break 语句之前,不会与 case 块的值进行比较,而是直接执行代码。
省略 break 几乎没有太大的价值。
建议:每次写了 case 之后,在写其他代码之前,立即写 break
SwitchTest 程序 及 运行结果:
public class SwitchTest
{
public static void main(String[] args)
{
char score = 'B';
switch (score)
{
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;
}
}
}
SwitchTest 程序 及 运行结果:
public class Switch省略break
{
public static void main(String[] args)
{
char score = 'B';
switch (score)
{
case 'A':
System.out.println("优秀");
case 'B':
System.out.println("良好");
case 'C':
System.out.println("中");
case 'D':
System.out.println("及格");
default:
System.out.println("不及格");
}
}
}
以下是一个小例子:
活动安排,内有自动获取系统时间并提取周几,然后根据设置的周几输出要做的事情,可以修改系统时间来输出不同的活动安排。
ActionSchedule 程序 及 运行结果:
import java.util.*;
import java.text.*;
public class ActionSchedule
{
public static void main(String[] args)
{
// 获取系统当前时间
Date date = new Date();
// System.out.println(date); // 显示英文的日期
// 创建一个 DateFormat 的实例,DateFormat 的作用是把日期转换成人看的懂的格式的字符串
DateFormat df = DateFormat.getDateInstance(DateFormat.FULL);
// System.out.println(df.format(date)); // 显示出来年月日 周几 2017年8月2日 星期三
String str = df.format(date); // 输出 2017年8月2日 星期三
int spacePos = str.indexOf(" "); // 获取" "在前面字符串中的位置
// spacePos代表空格的位置,spacePos+1 代表空格后面的字符
// 截取从空格后面的字符开始,直到结束的字符串
String day = str.substring(spacePos + 1);
switch (day)
{
case "星期一":
System.out.println("去跑步");
break;
case "星期二":
System.out.println("王者荣耀找人开黑");
break;
case "星期三":
System.out.println("去找宝贝玩耍");
break;
case "星期四":
System.out.println("去lol");
break;
case "星期五":
System.out.println("去购物");
break;
case "星期六":
System.out.println("去健身");
break;
case "星期日":
System.out.println("睡觉");
break;
}
}
}
循环:while 、do while、for、for each
循环(loop):回圈
把一段重复的代码执行多次,直到满足某个条件为止。
为了在合适的时候,停止重复执行,需要让程序出现满足停止循环的条件。
while循环:
while( 返回 boolean 值的表达式) // 只要 while 中表达式为 true,循环将会一直执行。
{
// 需要重复做的事情
}
如果循环体只有一条代码,可以省略花括号。
规则:如果省略了花括号,while 条件只控制到第一个分号(;)前面
建议:即使循环体只有一行代码,也包括花括号。
WhileTest 程序 及 运行结果:
public class WhileTest
{
public static void main(String[] args)
{
int i = 0;
while(i < 10)
{
System.out.println("i的值为: " + i++);
}
}
}
WhileError省略花括号 程序 及 运行结果:
public class WhileError
{
public static void main(String[] args)
{
int i = 0;
while(i < 10)
i ++; // 先知循环本条语句,直到 i 为10 时 false,跳出循环,输出为 10
System.out.println("i的值为: " + i++);
}
}
WhileError2 (while 后面有分号 陷阱) 程序 及 运行结果:
public class WhileError2
{
public static void main(String[] args)
{
int i = 0;
while(i++ < 10); // 同注意分号,但是此时i可以加到 10,然后false跳出循环(此时i为11)到 i++,最后输出12
// while(i < 10); // 注意本句后面的分号,分号意思本句就结束,所以这是一个死循环
{
i ++;
System.out.println("i的值为: " + i);
}
}
}
do while 循环:
do
{
}while ( 返回 boolean 值的表达式)
这个与 while 相比,把循环放在前面。
先执行一次循环体,如果条件为 true ,执行下一次循环
对于 do while 来说,无论如何,循环至少会执行一次。
for 循环:
for( 初始化语句 ; 返回 boolean 值的表达式 ; 每次循环体执行完后执行的代码 )
{
}
“初始化语句”可以省略。
如果有“初始化语句”,只有循环开始之前,会执行一次“初始化语句”
初始化语句可以一次定义多个变量!
“返回 boolean 值的表达式”可以省略。
如果省略,意味着它的值永远是 true
“每次循环体执行完后执行的代码”可以省略。
如果有“每次循环体执行完后执行的代码” ,将在每次循环体执行完成之后,开始下一次循环体之前,执行该代码。
只要两个分号之间的表达式返回 true ,程序将执行循环体。
ForTest 程序 及 运行结果:
for(int i = 0;i < 10;i++)
{
System.out.println("i的值为" + i);
}
ForTest2 程序 及 运行结果:
for(int i = 0;i < 10;i++)
{ // i = (int)(i*0.2)
System.out.println("i的值为" + (i *= 0.2));
// *= 强转小数为整型,所以不可能出现小数,所以结果一直为0
}
循环嵌套:
在循环里面,再放置循环——就是嵌套循环
把内层循环当成外层循环的一条语句即可。
循环嵌套 程序 及 运行结果:
int i = 0;
while(++i < 10)
{
System.out.println("进入外层循环");
for(int j = 0;j < 10;j++)
{
System.out.println("i的值是" + i + ",j的值是" + j);
}
System.out.println("外层循环的最后一行");
}
控制循环的关键词:break、continue、return
break 完全结束一个循环本身。
continue 停止当前循环体的执行(相当于【忽略 continue 后的语句】),开始下一次循环体
如果 continue 位于循环体的最后一部分,它就是多余的
return 结束整个方法。 遇到 return ,方法就会结束执行。
break 、continue 后可以紧跟标号。
带标号的 break 用于结束标号所标识的循环。
带标号的 continue 用于忽略标号所标识的循环后面剩下的语句。
ContinueTest 程序 及 运行结果:
public class ContinueTest
{
public static void main(String[] args)
{
for(int i = 0;i < 10;i ++)
{
System.out.println("i的值是" + i);
if(i > 3) // 当 i > 3 时,continue 执行,忽略后面的print语句,直接跳到 for
{
continue;
}
System.out.println("----------------");
}
}
}
ReturnTest 程序 及 运行结果:
public class ReturnTest
{
public static void main(String[] args)
{
int i = 0;
while(++i < 10)
{
System.out.println("进入外层循环");
for(int j = 0;j < 10;j++)
{
for(int k = 0;k < 20;k++)
{
System.out.println("i的值是" + i
+ ",j的值是" + j
+ ",k的值是" + k);
if(k > 3) //当 k > 3 时,执行 return ,结束整个方法
{
return;
}
}
}
System.out.println("外层循环的最后一行");
}
}
}
LabelTest 程序(带标号的 break) 及 运行结果:
outer:
for(int i = 0;i < 10;i ++)
{
for(int j = 0;j < 10;j ++)
{
System.out.println("i的值为" + i + ",j的值为" + j);
if(j > 3)
{
break outer;//带标号的循环用于结束标号所在循环的循环
}
}
} // 当 j = 4 时,执行 break outer,此时结束 标号 outer 所在的循环,即结束输出
ContinueLabel 程序(带标号的 continue) 及 运行结果:
outer:
for(int i = 0;i < 10;i ++)
{
for(int j = 0;j < 10;j ++)
{
System.out.println("i的值为" + i + ",j的值为" + j);
if(j > 3)
{
continue outer;//带标号的 continue 用于忽略标号所在循环的循环的剩下语句
} // 当 j = 4时,执行 continue outer,忽略标号所在循环的循环剩下语句,即忽略后三个},直接又到了 for(int i = 0;i < 10;i ++) 循环,最终结果输出 50 次
}
}
ContinueLabel2 程序(带标号的 continue) 及 运行结果:
outer:
for(int i = 0;i < 10;i ++)
{
for(int j = 0;j < 10;j ++)
{
System.out.println("i的值为" + i + ",j的值为" + j);
if(i > 3) // 注意,这里与上个程序的区别,j 换成 i !!!!!!!
{
continue outer;//带标号的 continue 用于忽略标号所在循环的循环的剩下语句
} // i = 4 时,输出 40 后判断 i>3,则忽略标号所在循环的循环的剩下语句,直接跳到 for(int i = 0;i < 10;i ++) 循环,i 加一 为 5 > 3, 以此类推,后面值输出 40,50,60,70,80,90 共输出 46 个值
}
}
练习:
在控制台用 * 打印大小可控制的圆。
以上,未完
写在最后:
总结一下互联网行业的一些缩写,昨天 FE 小哥哥问我,你知道 FE 是啥吗,气氛一度迷之尴尬……
PM:(project manager)现一般指的都是产品经理
RD:(Research and Development)研发
如:软件RD工程师就是软件研发工程师,诸如php程序猿,Java程序猿,无论是爱疯的还是安卓的都是属于这一类别。偏向于后端的技术实现。
FE:(Front-End)前端,前端开发(Front-End Development)
FE是web前端研发、前端开发的意思!前端工程师基于需求根据视觉设计稿、交互设计稿,实现前端界面显示及交互行为的过程。
UE:(User Experience,简称UX或 UE)用户体验
UI: (User Interface)用户界面。UI设计则是指对软件的人机交互、操作逻辑、界面美观的整体设计。
QA: (QUALITY ASSURANCE,中文意思是“质量保证”)测试
OP:(Operations)运维
DBA:(Database Administrator,简称DBA)数据库管理员
DB:既数据库(Database)。
今天周三,想想都一周了啊,时间过的真的快啊,马上要周六了哈哈,就又能见到腻了那~
打道回府,感冒好烦~