热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java基础知识总结之控制流程

流程是指程序运行时,各语句的执行顺序。控制流程就是用来控制程序中各语句执行的顺序。控制流程结构分为顺序结构、选择结构和循环结构三种。本文主要对Java的控制流程进行简单总结。一

流程是指程序运行时,各语句的执行顺序。控制流程就是用来控制程序中各语句执行的顺序。控制流程结构分为顺序结构、选择结构和循环结构三种。

本文主要对Java的控制流程进行简单总结。


一、块作用域

块(即复合语句)是指由一对大括号括起来的若干条简单的Java语句。块确定了变量的作用域。一个块可以嵌套在另一个块中。下面就是在main方法块中嵌套另一个语句块的示例:

public static void main(String[] args) {int n;...{int k;...}
}

但是,不能在嵌套的两个块中声明同名变量。


二、顺序结构

顺序结构是程序中最简单最基本的控制流程结构,就是按照代码的先后顺序,依次执行。顺序结构流程图如下:
1
代码示例:

public class OrderDemo {public static void main(String[] args) {System.out.println("开始");System.out.println("Hello World"); System.out.println("结束");}
}

三、选择结构

选择结构也被称为分支结构,可根据不同的条件按照不同的选择执行不同的代码。包括if条件语句和switch语句。其中if条件语句有ifif···elseif···else if三种格式。


1.if语句

格式:if(condition) statement


注意:这里的statement可以是一条简单语句也可以是一个块(复合语句)。


if语句控制流程图如下:
2
执行流程说明:先判断关系表达式的值是true还是false,如果是true则执行语句体,如果是false则不执行语句体。

代码示例:

public class IfDemo {public static void main(String[] args) { System.out.println("开始"); int x = 10;if (x == 10) {System.out.println("x等于10");}if (x == 20) {System.out.println("x等于20");}System.out.println("结束");}
}

2.if···else语句

格式:if (condition) statement1 else statement2

if···else语句控制流程图如下:
3
执行流程说明:先判断关系表达式的值是true还是false,如果是true则执行语句体1,如果是false则执行语句体2。


注意:



  • else部分是可选的,else子句与最邻近的if构成一组。



  • 三元运算符和if···else语句的情况很相似,在某些情况下应该是可以相互转换。三元运算符的操作都可以使用if语句改进,反之不成立。比如if语句的语句体是一条输出语句的时候,因为三元运算符是一个运算符,必须要求有一个结果返回,而输出语句却不能作为一个返回结果。




代码示例:

public class IfDemo2 {public static void main(String[] args) {//创建键盘录入对象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("----------------");//判断一个数据是奇数还是偶数System.out.println("请输入你要判断的数据:");int x = sc.nextInt();if (x % 2 == 0) {System.out.println(x + "这个数据是偶数");} else {System.out.println(x + "这个数据是奇数");}}
}

3.if···else if语句

格式:if (condition1) statement1 else if (condition2) statement2···else statement(n+1)

if···else if语句控制流程图如下:
4
执行流程说明:判断关系表达式1的值是true还是false,如果是true,就执行语句体1,如果是false,就继续判断关系表达式2的值是true还是false,如果是true,就执行语句体2,如果是false,就继续判断关系表达式3的值是true还是false···如果都不满足,就执行语句体n+1。

代码示例:

public class IfDemo3 {public static void main(String[] args) {/*键盘录入一个成绩,判断并输出成绩的等级。等级如下:90-100 优秀80-90 好70-80 良60-70 及格0-60 不及格*///创建键盘录入对象Scanner sc = new Scanner(System.in);//输入数据System.out.println("请输入考试成绩:");int score = sc.nextInt();if (score < 0 || score > 100) {System.out.println("输入的成绩有误");} else if (score >= 90 && score <= 100) {System.out.println("优秀");} else if (score >= 80 && score < 90) {System.out.println("好");} else if (score >= 70 && score < 80) {System.out.println("良");} else if (score >= 60 && score < 70) {System.out.println("及格");} else {System.out.println("不及格");}}
}

4.switch语句

格式:

switch (表达式) { case1:语句体1[break;]
...case 值n:语句体n[break;]default:语句体 n+1;[break;]
}  

解释:



  • swich中表达式的取值:byte、short、int、char、枚举(JDK1.5)、String(JDK1.7)。



  • case:后面的值就是要和表达式进行比较的值。



  • break:表示程序到这里中断,跳出switch语句。可以省略但最好不要省略。



  • default:如果所有的情况都不匹配,就执行这里,相当于if语句中的else。




switch语句控制流程图如下:
5
执行流程说明:首先计算表达式的值,然后和每一个case进行比较,如果有匹配的就执行对应的语句体,遇到break或执行到switch语句结束处为止。最后,如果没有匹配的,并且有default字句,就执行default的语句体。


注意:



  • case子句中的值必须是常量,且所有case子句中的值应该是不同的。

  • default可以省略,但是不建议,因为它的作用是对不正确的情况给出提示。

  • default并不是一定要放在switch语句最后,它可以出现在switch语句任意位置。

  • break可以省略,但是不建议,如果在case分支语句的末尾没有break语句,那么就会接着执行下一个case分支语句,这可能会引发错误。

  • 当在switch语句中使用枚举常量时,不必在每个case中指明枚举名,可以由switch的表达式值确定。


代码示例:

public class SwitchDemo {public static void main(String[] args) {/*键盘录入一个数字(1-7),输出对应是星期几*///创建键盘录入对象Scanner sc = new Scanner(System.in);//输入数据System.out.println("请输入一个数据:");int week = sc.nextInt(); //switch判断语句switch (week) {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;default:System.out.println("输入的数据有误");break;}}
}

public class SwitchDemo2 {public static void main(String[] args) {/*根据给定的月份,输出对应的季节*///创建键盘录入对象Scanner sc = new Scanner(System.in);//输入数据System.out.println("请输入月份:");int month = sc.nextInt();switch (month) {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("输入的月份有误");}}
}

if语句和switch语句各自的使用场景:



  • if语句的使用场景:

    • 针对boolean类型的判断

    • 针对一个区间的判断

    • 针对几个常量的判断



  • switch语句的使用场景:

    • 针对几个常量的判断




四、循环结构

循环语句就是在满足一定条件的情况下反复执行某一个操作。包括while循环语句、do···while循环语句和for循环语句。


1.while语句

基本格式:

while (判断条件语句) {循环体语句;
}

扩展格式:

初始化语句;
while (判断条件语句) {循环体语句;控制条件语句;
}

while语句语句控制流程图如下:
6
执行流程说明:while语句的循环方式为利用一个条件来控制是否要继续反复执行这个语句。

代码示例:

public class WhileDemo {public static void main(String[] args) {//求1-100之和int sum = 0;int x = 1;while (x <= 100) {sum += x;x++;}System.out.println("sum:" + sum);}
}

2.do···while语句

基本格式:

do {循环体语句;
} while (判断条件语句);

扩展格式:

do {循环体语句;控制条件语句;
} while (判断条件语句);

do···while语句语句控制流程图如下:
7
执行流程说明:首先执行初始化语句,然后执行循环体语句,然后执行控制条件语句,然后执行判断条件语句看结果是true还是false,如果是true,回到循环体语句继续循环,如果是false,就结束循环。

代码示例:

public class DoWhileDemo {public static void main(String[] args) {//求1-100之和int sum = 0;int x = 1;do {sum += x;x++;} while (x <= 100);System.out.println("sum:" + sum);}
}

3.for语句

格式:

for (初始化语句; 判断条件语句; 控制条件语句) {循环体语句;
}

for语句语句控制流程图如下:
8
执行流程说明:首先执行初始化语句,然后执行判断条件语句,如果结果是true,就继续循环,如果结果是false,循环结束,继续执行循环体语句之后会执行控制条件语句,然后回到判断条件语句进行判断。


注意:



  • 当在for语句的初始化语句(第一部分)中声明了一个变量之后,这个变量的作用域就为for循环的整个循环体。

  • 如果在for语句内部声明一个变量,这个变量就不能在循环体之外使用。如果想要在for循环体之外使用控制条件变量的最终值,就要确保这个变量在循环语句的前面且在外部声明。

  • 可以在各自独立的不同for循环中定义同名的变量。

  • for循环语句只不过是while循环的一种简化形式,while循环可以和for循环可以等价转换。


代码示例:

public class ForDemo {public static void main(String[] args) {/*求5的阶乘,阶乘公式如下:n! = n*(n-1)!=n*(n-1)*(n-2)*...*3*2*1*/ //for循环版本int jc = 1;//这里的x可以直接从2开始for (int x = 2; x <= 5; x++) {jc *= x;}System.out.println("5的阶乘是:" + jc);System.out.println("------------");//while循环版本int jc2 = 1;int y = 2;while (y <= 5) {jc2 *= y;y++;}System.out.println("5的阶乘是:" + jc2);}
}

三种循环语句的区别:



  • for语句的控制条件变量在循环结束后不能再使用,而while的则可以继续使用。

  • for适合针对一个范围的判断进行操作,while适合判断次数不明确的操作。

  • do…while循环至少执行一次循环体,for和while必须先判断条件是否为true,然后才能决定是否执行循环体,也就是循环体中代码可能不会执行。


4.foreach语句

foreach语句是Java5后新增的for语句的特殊简化版本,并不能完全替代for语句,但所有foreach语句都可以改写为for语句。foreach语句可以很方便的遍历数组和集合。格式如下:

for (元素的数据类型 变量名 : 数组或者Collection集合对象) {循环体语句;
}

执行流程说明:和for循环类似。


注意:



  • foreach循环语句的循环变量将会遍历数组或集合中的每个元素,而不需要使用下标值。

  • 在很多场合下,还是需要使用传统的for循环。例如,如果不希望遍历集合中的每个元素,或者在循环内部需要使用下标值等。


代码示例:

public class ForeachDemo {public static void main(String args[]) {int[] numbers = {1, 2, 3, 4, 5};for (int x : numbers) {System.out.print(x);}}
}

五、跳转语句

Java语言中提供了3种跳转语句,分别是break语句、continue语句和return语句。


1.break语句

break语句用在switch语句和循环语句中,在switch语句中,break用于退出switch语句,在循环语句中,break(不带标签)作用为跳出单层循环,带标签的break语句可以跳出多层循环。带标签的break语句的标签必须放在希望跳出的最外层循环之前,并且必须紧跟一个冒号。


注意:



  • 事实上,可以将标签应用到任何语句中,甚至可以应用到if语句或者块语句中。

  • 带标签的跳转只能跳出语句块,不能跳入语句块。


代码示例:

public class BreakDemo {public static void main(String[] args) {//跳出单层循环for (int x = 0; x < 10; x++) {if (x == 3) {break;}System.out.println("HelloWorld");}System.out.println("over");System.out.println("-------------");//带标签的breakwc:for (int x = 0; x < 3; x++) {nc:for (int y = 0; y < 4; y++) {if (y == 2) {//break nc;break wc;}System.out.print("*");}System.out.println();}}
}

2.continue语句

continue语句只能用于循环语句中,用于将控制转移到最内层循环的首部,即结束一次循环,继续下一次的循环。还有一种带标签的continue语句,将跳转到与标签匹配的循环首部。代码示例:

public class ContinueDemo {public static void main(String[] args) {for (int x = 0; x < 10; x++) {if (x == 3) {continue;}System.out.println(x);}}
}

3.return语句

return即方法返回,主要用于结束一个方法,并把控制权交给调用它的语句。代码示例:

public class ReturnDemo {public static void main(String[] args) {getName();}public String getName() {return "ZhangSan";}
}

推荐阅读
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文介绍了Java高并发程序设计中线程安全的概念与synchronized关键字的使用。通过一个计数器的例子,演示了多线程同时对变量进行累加操作时可能出现的问题。最终值会小于预期的原因是因为两个线程同时对变量进行写入时,其中一个线程的结果会覆盖另一个线程的结果。为了解决这个问题,可以使用synchronized关键字来保证线程安全。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
author-avatar
milkchocolate1981
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有