当前位置:

首页 > 编程开发 > Java逻辑控制怎么使用

Java逻辑控制怎么使用

一,块作用域首先在深入学习控制结构之前,需要先了解块(block)的概念。块:即复合语句,是指由一对大括号括起来的若干条简单的Java语句。块确定了变量的作用域。一个块可以嵌套在另一个块中。publicclassTestDemo220425{publicstaticvoidmain(String[]args){intn=10;{intk=20;intn=20;}}}在这段代码中,我们主函数里面的那个括号括起来的部分就是块。一个块可以嵌套在另一个块里面,但是注意,在Java里面,不能在嵌套的块里面声明同名的

本文目录

      一,块作用域

      首先在深入学习控制结构之前,需要先了解块(block)的概念。

      块:即复合语句,是指由一对大括号括起来的若干条简单的 Java 语句。块确定了变量的作用域。一个块可以嵌套在另一个块中。

      public class TestDemo220425 {
          public static void main(String[] args) {
              int n = 10;
              {
                  int k = 20;
                  int n = 20;
              }
          }
      }

      在这段代码中,我们主函数里面的那个括号括起来的部分就是块。一个块可以嵌套在另一个块里面,但是注意,在Java里面,不能在嵌套的块里面声明同名的变量,比如上面代码的内部块里面 int n = 20的做法就是错误的。这里要区分C/C++里面有全局变量遇到同名局部变量的时候会优先使用局部变量,屏蔽全局变量,这在Java里面是不允许这样做的(Java无全局变量的概念,这里只是类比)。

      二,顺序结构

      顺序结构比较简单,按照代码书写的顺序一行一行执行。

      图示:

      Java逻辑控制怎么使用

      三,分支结构

      图示:

      Java逻辑控制怎么使用

      注意:if /else if 之间是一个并列的关系,不像是if else是一个非此即彼的关系,这种叫做多分支的结构。

      有关分支结构的几个注意点:

      1,if括号里面的表达式只能是布尔表达式,没有什么非0为真,0表示假。

      2,Java里面的代码风格我们推荐行尾风格。

      3,悬空else问题,也就是说if/else语句最好一定要把括号加上,这样代码可读性更好,如果不加,当有多个if/else语句时,else一定是与最近的else进行匹配

      public class TeseDemo220424 {
          public static void main(String[] args) {
              int x = 10;
              int y = 10;
              if (x == 10)
                  if (y == 10)
                      System.out.println("aaa");
              else //这个else其实匹配的是if(y == 10)
                  System.out.println("bbb");
          }
      }

      switch语句问题(重点)

      public class TeseDemo220424 {
          public static void main(String[] args) {
              int a = 3;
              switch(a){
                  default:
                      System.out.println("输入错误!");
                      break;
                  case 1:
                      System.out.println(1);
                      break;
                  case 2:
                      System.out.println(2);
                      break;
              }
          }
      }

      注意:

      1,无论default的位置在哪里,只要没有匹配到任何一个case,就会直接走default。

      2,每一个case语句以及default语句后面的break语句都不能省略,不然就会穿透执行,除非是在特定的情况下,不然break都不能掉。

      3,switch结构里面的关键字只有case,break,continue是用在循环里面的,这里是分支结构,不要混淆。

      4,switch括号里面的数据的类型只能是byte, short, int, char,String, enum类型,然后case后面的常量与switch匹配就行。(注意不能是long,因为整形都会往int转,但是long转int会有精度损失)。

      5,case后面的常量值不能够重复,每一个case就代表一种不同的情况。

      6,switch的括号里面可以放表达式,但是不能像if语句一样,可以放一些较为复杂的表达式。

      7,switch语句可以嵌套,但是不好看。

      四,循环

      三大循环:while循环,for循环,do while循环(循环具体的基本定义就不做介绍了,这里只是点一些要注意的点)

      4.1,易错点

      1,循环的几个部分,循环变量的定义,条件判断,循环体,循环变量的迭代。一定要注意循环变量的迭代,如果说一个循环变量没有迭代直至向着跳出循环的方向进行的话,那么就可能造成死循环了。

      2,不要在循环内部对循环变量做手脚,即使你需要使用你的循环变量,用一个临时的变量来接收它的值,然后再去使用。

      3,轻易不要将浮点数作为循环变量。

      public class TestDemo220425 {
          public static void main(String[] args) {
              for(double x = 0;x != 10;x += 0.1){
                  System.out.println("haha");
              }
          }
      }

      不出意外的,这段代码死循环了,也就是我说的将浮点数作为循环变量。因为0.1在存储的时候,小数部分是无法用二进制准确表示的,所以我们每次加的都是一个近似值,那么这里可能刚好加了之后可能刚好跳过了10,所以循环就一直进行了下去。

      4.2,break语句

      public class TeseDemo220424 {
          public static void main(String[] args) {
              int i = 1;
              while(i <= 10){
                  if(i == 2){
                      break;
                  }
                  System.out.println("hehe");
                  i++;
              }
          }
      }

      程序运行截图:

      Java逻辑控制怎么使用

      break语句的作用是跳出它所在的循环,比如上面当i == 2的时候,就会跳出while循环,所以只会输出一个hehe。

      break的扩展用法:

      在Java中,是没有goto语句的,但是因为设计者认为goto语句思想还是没有问题的在某些特定的条件下,确实可以起到很好的跳出循环的效果,所以在Java里面就发明了**带标签的break语句,作用是可以达到break到标签所指定的循环的外部。 (标签只要是合法的标识符即可)**

      示例:

      public class TestDemo220425 {
          public static void main(String[] args) {
              label1:
              while(true){
                  for(int i = 0;i < 10;i++){
                      if(i == 3){
                          break label1;
                      }
                      System.out.println(i);
                  }
              }
              System.out.println("已跳出循环!");
          }
      }

      程序运行截图:

      Java逻辑控制怎么使用

      可以看到,到我们利用标签后,可以指定跳出到哪里。如果这里只是用break,不用标签的话,那么break就只会跳出里层的for循环,外面的while还是一个死循环,用了标签之后,当i== 3,就可以直接跳出到while循环的外部。

      4.3,continue语句

      public class TeseDemo220424 {
          public static void main(String[] args) {
              int i = 1;
              while(i <= 10){
                  if(i == 2){
                      continue;
                  }
                  System.out.println("hehe");
                  i++;
              }
          }
      }

      程序运行截图:

      Java逻辑控制怎么使用

      continue语句的作用是结束本轮循环而开始下一次的循环,如上题,当i == 2,所以就会直接跳过后面的语句,也就是i++不会执行了,导致i一直等于2,所以陷入了死循环。当然如果你这里用for循环就不会这样了,因为i++的执行顺序在前面,continue影响不到

      continue扩展用法:

      同样的,在continue里面,也是可以使用标签的,可以指定跳到与标签匹配的循环的首部。

      示例:

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

      程序运行截图:

      Java逻辑控制怎么使用

      五,输入输出

      5.1,输出到控制台

      Java逻辑控制怎么使用

      利用%结合上面的转换符就可以进行格式化的输出,当然在进行格式化输出的时候,也可以运用一些标志,比如输出的时候带前缀,带正负号等等…

      Java逻辑控制怎么使用

      5.2,从键盘输入

      public class TeseDemo220424 {
          public static void main(String[] args) {
              Scanner myscanner = new Scanner(System.in);
              System.out.println("请输入年龄");
              int num = myscanner.nextInt();
              System.out.println(num);
              System.out.println("请输入名字");
              String str = myscanner.nextLine();//读入一行
              System.out.println(str);
              System.out.println("请输入专业");
              String str1 = myscanner.next();
              System.out.println(str1);//读入一个字符串,遇到空格停止
          }
      }

      这里就是要注意你的输入与你接收的方法要对应,另外就是当你用了nextLine()来接收一行的时候,要注意它前面有不有用输入的方法,因为你的换行会被当成一行读入到nextLine()里面,这里就类似于C语言里面吃掉缓冲区里面的回车是一个道理。

      程序运行截图:

      Java逻辑控制怎么使用

      扩展,在用键盘进行输入的时候,我们是能够看到我们自己的输入的,但是在某些情况下,比如输入密码,我们一般是不想让人看到的,所以这里可以运用到Console类。(这里只做简要介绍)

      Console类:访问与当前Java虚拟机关联的基于字符的控制台设备(如果有的话)的方法,也即使从控制台接收输入的方法。

      使用示例:

      import java.io.Console;
      public class TestDemo220425 {
          public static void main(String[] args) {
              Console cons = System.console();
              String username = cons.readLine("User name: ");
              char[] passwd = cons.readPassword("Password:");
          }
      }

      在IDEA下的运行截图:

      Java逻辑控制怎么使用

      ❌???怎么直接报空指针异常了,寻思着这里也没用到指针吧,感到十分的不解…????????

      后来,度娘告诉我是这样的:在使用IDEA等集成开发环境中,使用Console将全为null,表示Java程序无法获得Console实例,是因为JVM不是在命令行中被调用的,或者输入输出被重定向了。以至于我们只能去控制台下或者linux环境下去运行程序,如下图在控制台下运行:

      Java逻辑控制怎么使用

      可以看到在控制台下运行正常,并且我们输入的密码是看不到的(这里真的输入了的哦,只是看不到,中国人不骗中国人的!????)

      5.3,循环输入

      public class TeseDemo220424 {
          public static void main(String[] args) {
              Scanner myscanner1 = new Scanner(System.in);
              while(myscanner1.hasNextInt()){
                  int age = myscanner1.nextInt();
              }
          }
      }

      hasNextInt():如果此扫描器输入中的下一个标记可以使用nextInt()方法将其解释为默认基数中的int值,则返回true。也即是说只有你下一个输入的是int类型的值才能够进入循环。

      程序运行截图:

      Java逻辑控制怎么使用

      循环输入的时候可以ctrl + D 进行正常退出

      六,猜数字游戏

      这里主要是介绍Java里面的生成随机数的方法

      所在包:Java.util.random

      import java.util.Random;
      public class TeseDemo220424 {
          public static void main(String[] args) {
      //        生成随机数
              Random random = new Random();
              int rannum = random.nextInt(100);//生成[0,100) 的随机数 其他范围可以通过在后面加上数来进行范围改变,默认左边都是从0开始
              
          }
      }

      对于int rannum = random.nextInt();如果你后面nextInt()中不给值,那么它产生的就是所有有效的整数,包括正数,负数,0

      注意:Random random = new Random(2022); 这里在定义随机数对象的时候是可以传参的,因为生成随机数是以时间戳为参考的,所以当你传入一个数后,他就只会以这个数为标准进行时间戳的计算,进而产生的随机数每次都是一样的。

      其他方法:

      Java逻辑控制怎么使用

      其他方法主要就是Math.random(),这个产生的是0~1之间的小数,左闭右开。当然这个是没有上面那种产生同一个随机数的用法的。

      本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
      作者最新文章
      编程开发 Java
      相关文章 更多
      Java单元测试入门:使用JUnit 5编写第一个测试用例
      Java单元测试入门:使用JUnit 5编写第一个测试用例

      面向初学者的JUnit 5实用入门指南。从测试概念、Maven依赖配置,到手把手编写首个单元测试用例及断言验证,助你掌握Java单元测试的核心流程。

      Java变量未初始化报错解析:局部变量与成员变量默认值差异
      Java变量未初始化报错解析:局部变量与成员变量默认值差异

      深入解析Java中局部变量未初始化编译报错与成员变量自动赋予默认值的机制差异,涵盖JVM内存分配、编译期确定性赋值检查与实际排查修复方案。

      Java获取当前时间并格式化输出:DateTimeFormatter与SimpleDateFormat
      Java获取当前时间并格式化输出:DateTimeFormatter与SimpleDateFormat

      详细讲解在Java中获取当前系统时间并进行格式化输出的两种核心方案:基于Java 8全新日期时间API的DateTimeFormatter与传统遗留的SimpleDateFormat,包含完整代码示例、线程安全机制对比及生产选型建议。

      Java中final与static final常量的定义及初始化规则
      Java中final与static final常量的定义及初始化规则

      深入解析Java中final变量与static final常量的定义、内存语义、初始化时机及合法赋值路径,涵盖编译期常量优化与实战避坑指南。

      Java抽象方法与接口方法的区别及选型建议
      Java抽象方法与接口方法的区别及选型建议

      深入对比Java中抽象类抽象方法与接口方法的语法演进、设计意图及运行期差异,并提供清晰的架构选型决策流程与实战范例。

      Java实现HTTP请求与JSON解析的完整代码示例
      Java实现HTTP请求与JSON解析的完整代码示例

      本文提供Java标准库HttpClient发起HTTP GET/POST请求并结合Jackson进行JSON数据反序列化与序列化的完整代码示例与工程实践指南。

      Java递归出现StackOverflowError的原因分析及栈空间优化方案
      Java递归出现StackOverflowError的原因分析及栈空间优化方案

      详细分析Java递归调用出现StackOverflowError的原因,结合代码说明线程栈、栈帧和递归深度之间的关系,并介绍终止条件排查、迭代改写、减少栈帧开销以及通过-Xss调整JVM栈空间的方法。

      Java空指针异常(NPE)的代码排查与修复实例
      Java空指针异常(NPE)的代码排查与修复实例

      针对Java中常见的NullPointerException(NPE),本文从堆栈日志定位、典型代码触发场景、具体修复代码对比到防御体系进行系统讲解,提供实用且易上手的排查与修复方案。

      selenium上传文件教程本地文件路径设置方法
      selenium上传文件教程本地文件路径设置方法

      深入解析Selenium处理文件上传的技术细节,涵盖标准HTML控件的路径直接注入法与非标准控件的系统级模拟方案,提供Windows与Linux环境下的路径设置最佳实践及常见异常排查。

      大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景
      大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景

      针对大数据工程场景,系统对比Java、Scala与Python在执行性能、生态结合、开发效率和维护成本上的核心差异,给出清晰的架构选型依据与落地方案。

      查看更多
      精品专题 更多
      装机必备
      装机必备

      正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

      Windows
      Windows

      正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

      PDF教程
      PDF教程

      正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

      Mac软件 更多
      讯飞智作 网页版
      讯飞智作 网页版
      Windows/ macOS/ Linux

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      火山引擎 网页版
      火山引擎 网页版
      Windows/ macOS/ Linux

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      Aperty macOS版
      Aperty macOS版
      macOS

      Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

      WINDOWS 更多
      讯飞智作 网页版
      讯飞智作 网页版
      Windows/ macOS/ Linux

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      火山引擎 网页版
      火山引擎 网页版
      Windows/ macOS/ Linux

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      PixTV 网页版
      PixTV 网页版
      Windows

      PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。