首页 > 编程语言 > 详细

Java流程控制

时间:2021-03-04 23:05:15      阅读:41      评论:0      收藏:0      [点我收藏+]

1.用户交互Scanner

  Scanner来自于Java.util.Scanner,是Java用于用户交互的类,我们常用Scanner类中的next()和nextLine()方法来获取用户输入。

  next()方法:

  1)一定要读到有效字符后才会结束输入;

  2)对于有效字符前的空白,next()方法会自动将其去掉;

  3)只有输入有效字符后才将其后面的空白作为分隔符或者结束符;

  4)next()不能得到带有空格的字符串。

  技术分享图片 结果:技术分享图片

 

  nextLine()方法:

  1)以Enter作为结束符,返回的是换行符前的所有有效字符;

  2)可以获得空白字符。

   技术分享图片 结果:技术分享图片

   

  以上两个示例中,分别使用了hasNext()和hasNextLine()两个方法来判断语句是否存在输入,但事实上这两个方法逻辑是这样的:

  技术分享图片  

   技术分享图片

  hasNext()在缓冲区中依次扫描输入的字符,若有有效字符则返回true,并继续扫描。直至扫描为空,这是这两个方法并不会返回false,而是将方法阻塞,等待用户输入内容后继续扫描。

  所以在上面的例子中,不用加条件判断语句也可以。

  但如果在实践中需要持续输入内容,可以通过while循环实现,并且将条件判断语句改为带参数的重载方法即可实现。如下图所示:

  技术分享图片 结果:技术分享图片此时只有当收集的输入为完整的#字符时,hasNext()方法返回的是true,取反后跳出输入循环。

   或者也可以用hasNextInt()、hasNextDouble()等方法判断输入的数据类型来实现。

 

2.选择结构

  if结构:

  技术分享图片 结果:技术分享图片 技术分享图片 技术分享图片

   

  switch结构:对于一个变量分多种情况进行匹配区分,并进行对应的步骤执行。

  语句中的变量类型可以支持byte、short、int、char或者String(String是从jdk7开始实现)。注意case标签必须为字符串常量或字面量,不能是变量。

  技术分享图片 结果:技术分享图片 技术分享图片 技术分享图片

  case穿透现象:对于每一个分支case条件,需要在执行完对应步骤后通过break语句跳出选择结构,否则会继续沿其他case分支步骤执行,如下图所示:

  技术分享图片 结果:技术分享图片

 

   对于字符串的实现,我们可以通过反编译的手段看下源码上Java是如何实现字符串的case匹配的:

  首先找到当前代码的字节码文件,也就是class文件,从IDEA中的project structure中打开class文件的存放目录:

  技术分享图片

 

   然后直接将class文件复制到idea中存放代码的src目录下打开,便可以看到反编译后的代码:

  技术分享图片

   可以看到反编译后的代码,说明case的字符串实现用的是字符串的哈希码来进行比对的。

 

3.循环结构

  循环结构分为while、dowhile、for循环等,大多数情况是需要设置条件让循环停止下来的,如果没有停止条件则为死循环,一般业务编程中应尽量避免出现这种情况,因为这会影响程序性能或造成程序卡死崩溃。

  少部分场景比如服务器监听场景,需要循环一直执行。

  技术分享图片 先判断条件,再决定是否循环执行;

  技术分享图片 先执行一次语句,再判断条件;

  技术分享图片  最常用的循环语句。备注:for(;;)为死循环;

  技术分享图片 增强型for循环,一般用于遍历数组元素。示例:技术分享图片 结果:技术分享图片

  九九乘法表,示例:

  技术分享图片 结果:技术分享图片

 

 4.break、 continue、 goto

   break:用在任何循环语句的主体部分,使用了break之后可以立即跳出当前循环,不执行循环剩余的语句和之后的循环(包括用在switch中);

  continue:用在任何循环语句的主体部分,使用了continue之后可以立即跳出此次循环,不执行该次循环剩余的语句,但会继续下一次循环的条件验证和后续步骤。

  goto:属于java的保留字,但未在语言中正式使用,主要是用于嵌套循环的互相跳转(不建议用,仅做了解),比如从第二层循环直接跳到第一层循环时,就可以在第一层循环的开头加入标签,如:

  label:for(i=0;i<100;i++){

    for(xxx;xxx;xxx){

      if(xx){

        continue label; //此时当满足条件xx时,就会从内部循环跳到外部循环label处

      }

    }

  }

Java流程控制

原文:https://www.cnblogs.com/Kknock/p/14482736.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!