【Java 基础语法】逻辑控制

简介: JavaSE 逻辑控制介绍

一、逻辑控制语句

1. 顺序结构

像我们写的代码,执行时会按照从上到下一行一行的执行。这就是顺序结构,不同的顺序,结果可能就不一样。如

System.out.println(1)
System.out.println(2)    
System.out.println(3)

该代码结果为 1(换行)2(换行)3,但是如果把顺序改变结果就变了

System.out.println(2)
System.out.println(3)    
System.out.println(1)

该代码结果就变为 2(换行)3(换行)1

2. 分支结构

2.1 if 语句

和 C 语言一样,在 Java 中 if 语句也有三种基本的形式

  • 形式一

    if(布尔表达式){
        // 条件满足时执行的代码
    }
  • 形式二

    if(布尔表达式){
        // 条件满足时执行的代码
    }else{
        // 条件不满足时执行的代码
    }
  • 形式三

    if(布尔表达式1){
        // 条件1满足时执行的代码
    }else if(布尔表达式2){
        // 条件2满足时执行的代码
    }else{
        // 条件都不满足时执行的代码
    }

但是从形式上我们就可以看出还是有一些不同的

  1. 条件表达式必须是布尔值,不能像 C 语言一样直接使用一个数值,如

    int a = 10;
    if(a){
        System.out.println(a);
    }

    这种代码就是错的,条件必须是布尔值

    int a = 10;
    if(a > 0){
        System.out.println(a);
    }

    这种代码就是正确的

  2. 代码风格问题,比如我写 C 语言时喜欢把一对大括号并列在行首。但是在 java 中更推荐上述三种形式那样的风格,将 { 放在 if 或 else 同一行
  3. 还要注意悬垂 else 问题,记住 else 是与 最接近的 if 匹配。如

    int a = 2;
    if(a>0)
        if(a>10)
            System.out.println("a > 10");
    else 
        System.out.println("a > 0 && a <= 10");

    我们要知道,最下面的 else 是与与它最近的 if 匹配的

2.2 switch 语句

Java 中的 switch 语句和 C 语言中的几乎一样,大家如果不太熟悉 switch 以及该章所讲解的一些逻辑结构可以去看看我写的 C语言三大语句注意事项 。但是既然不是完全一样,那哪里有区别呢?

在 Java 中,switch(表达式) 中的表达式是有类型限制的。

它只能使用:整数(只包括 byte、short、int)、字符(char)、字符串(String)、枚举类型

3. 循环结构

3.1 while 循环

舒服,Java 的 while 循环和 C 语言也是极其类似,只有一个小的差异

while (表达式) 中的表达式必须是布尔值

3.2 break

break 的功能是:让最靠近包裹它的整个循环提前结束。这也是和 C 语言是一样的

3.3 continue

continue 的功能是:跳过本次循环,立即进入下次循环。这也是和 C 语言是一样的

3.4 for 循环

Java 中的 for 循环和 C 语言中的也很类似,只有一个差异

for(表达式1;表达式2;表达式3) 中的表达式2是循环的判断条件,要使用布尔值

3.5 do while 循环

Java 中的 do while 循环也是和 C 语言很类似,只有一个差异

while 中的循环条件只能是布尔值

但是一般不推荐使用,因为它至少会执行一次循环,不注意可能会犯错

二、输入输出方式

1. 输出到控制台

  1. 基本语法

    System.out.println(msg);        // 输出一个字符串,自带换行
    System.out.print(msg);            // 输出一个字符串,不带换行
    System.out.printf(format,msg);    // 格式化输出,括号内内容类似于 C 语言的 printf
  2. 代码示例

    int a = 10;
    System.out.println(a);            // 输出 a,自带换行
    System.out.print(a);            // 输出 a,不带换行
    System.out.printf("%d\n",a);    // 格式化输出,括号内内容类似于 C 语言的 printf
  3. 格式化输出表(随用随查)

    转换符 类型 例子 输出结果
    d 十进制整数 ("%d",100) 100
    x 十六进制整数 ("%x",100) 64
    o 八进制整数 ("%o",100) 144
    f 定点浮点数 ("%f",100f) 100.000000
    e 指数浮点数 ("%e",100f) 1.000000e+02
    g 通用浮点数 ("%g",100f) 100.000
    a 十六进制浮点数 ("%a",100) 0x1.9p6
    s 字符串 ("%s",100) 100
    c 字符 ("%d",'1') 1
    b 布尔值 ("%b",100) true
    h 散列码 ("%h",100) 64
    % 百分号 ("%.2f%%",2/7f) 0.29%

2. 从键盘输入

  1. 读入一个字符(不推荐使用)

    直接使用 System.in.read() 可以读入一个字符,但是需要搭配异常处理。如果不搭配异常,如下面代码就会编译出错

    public static void main(String[] args) {
            System.out.print("Enter a char:");
            char i = (char)System.in.read();
            System.out.println("The char is :" + i);
        }

    我们需要将鼠标放到 read 上面,再按住 Alt + Enter 键就会出现在这里插入图片描述

    再点击第一个或者第二个就不会报错了。这里其实是处理了异常,但是一个简单的读入字符就要这么复杂所以不推荐使用。

  2. 使用 Scanner 读取字符/字符串/整数/浮点数/布尔值

    1. 首先需要导入 util 包 import java.util.Scanner; ,在 IDEA 中,其可以通过输入 Scanner 后直接回车快速导入
    2. 然后再构造一个 Scanner 对象并与”标准输入流“ System.in 关联: Scanner 对象名 = new Scanner(System.in);
    3. 再就可以通过 Scanner 类的各种方法实现输入操作了

      import java.util.Scanner;
      
      public class TestDemo {
          public static void main(String[] args) {
              Scanner in = new Scanner(System.in);
              
              int a = in.nextInt();            //读入一个整数
              double b = in.nextDouble();        //读入一个浮点数
              boolean c = in.nextBoolean();    //读入一个布尔值
              String s = in.next();            //读入一个字符串
          }
      }

      但是要注意,上述读入字符串是按空白符当作分隔符的,故只能读入第一个空格之前的字符。如果想要读取该行的所有字符(包含空格),应该使用

      String s = in.nextLine();

      但是使用这个方法还是有很大的缺陷,如果这行代码上面还有其他读入的语句,可能这行代码就不会实行。因为上一行的回车可能被它读入,直接这行结束。因此,只能将其放在读入代码的第一个或者在它前面加一个

      in.nextLine();

      来读取掉之前的回车。

  3. 我们知道在 C 语言中可以写类似于这样的代码输入多组数据

    int a;
    while(scanf("%d",&a) != EOF)
    {
        // 内容
    }

    在 C++ 中我们也可以写类似于这样的代码输入多组数据

    int a;
    while(cin>>a)
    {
        // 内容
    }

    那么在 Java 中怎么做呢?代码如下

    Scanner in = new Scanner(System.in);
    while(in.hasNextInt()){
        int a = in.nextInt();
        // 内容
    }

    并且在 IDEA 上我们可以手动输入 Ctrl + D 结束,在 Windows 的 cmd 上 我们手动输入 Ctrl + Z 结束,在 Linux 或 Mac 上,输入 Ctrl + D 结束

三、猜数字游戏

学 C 语言的时候我们可能都接触过随机数的生成,或者直接写一个猜随机数的游戏。那么使用 Java 该怎么写呢?

  1. 首先我们要知道在 Java 中随机数是怎么生成的。

    1. 首先需要导入 util 包 import java.util.Random; ,在 IDEA 中,其可以通过输入 Random 后直接回车快速导入
    2. 然后通过 Random 类中的方法生成我们想要的,如

      import java.util.Random;
      
      public class TestDemo {
          public static void main(String[] args) {
              Random random = new random();    // 默认随机种子是系统时间
              int rand = random.nextInt(bound:100) + 1;
              // random.nextInt(bound:100) 是生成[0,100)间的随机整数
          }
      }
  2. 接下来就是很简单了,只要我们输入的数字与随机数字进行一下比较。直到判断正确再退出就可。故最终的代码是

    public class TestDemo {
    
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            Random random = new Random();
            int rand = random.nextInt(100) + 1;
            while (true){
                System.out.print("请输入你所猜测的数字:");
                int num = scanner.nextInt();
                if(num == rand){
                    System.out.println("恭喜你,猜对了!");
                    break;
                }else if(num < rand){
                    System.out.println("很遗憾,你猜的数字小了!");
                }else{
                    System.out.println("很遗憾,你猜的数字大了!");
                }
            }
        }
    }

四、总结

这章讲了 Java 的逻辑控制结构,包含了顺序结构、顺序结构和分支结构。还讲了 Java 的输入输出方式。并在最后用 Java 程序写了一个简单的猜数字游戏。我们可以发现,很多都是和 C 语言类似的,这也降低了我们学习的难度。

下一章则是关于方法学习的介绍,这也是类似于 C 语言函数的东东。希望大家喜欢我的文章。自己也要继续加油,奥里给!
在这里插入图片描述

相关文章
|
3月前
|
存储 Java 容器
Java基本语法详解
本文深入讲解了Java编程的基础语法,涵盖数据类型、运算符、控制结构及数组等核心内容,帮助初学者构建坚实的编程基础。
|
2月前
|
存储 SQL NoSQL
Redis-常用语法以及java互联实践案例
本文详细介绍了Redis的数据结构、常用命令及其Java客户端的使用,涵盖String、Hash、List、Set、SortedSet等数据类型及操作,同时提供了Jedis和Spring Boot Data Redis的实战示例,帮助开发者快速掌握Redis在实际项目中的应用。
283 1
Redis-常用语法以及java互联实践案例
|
2月前
|
Java
Java基础语法与面向对象
重载(Overload)指同一类中方法名相同、参数列表不同,与返回值无关;重写(Override)指子类重新实现父类方法,方法名和参数列表必须相同,返回类型兼容。重载发生在同类,重写发生在继承关系中。
139 1
|
4月前
|
Java 数据库连接 数据库
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
本文全面总结了Java核心知识点,涵盖基础语法、面向对象、集合框架、并发编程、网络编程及主流框架如Spring生态、MyBatis等,结合JVM原理与性能优化技巧,并通过一个学生信息管理系统的实战案例,帮助你快速掌握Java开发技能,适合Java学习与面试准备。
228 2
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
|
3月前
|
算法 Java 测试技术
零基础学 Java: 从语法入门到企业级项目实战的详细学习路线解析
本文为零基础学习者提供完整的Java学习路线,涵盖语法基础、面向对象编程、数据结构与算法、多线程、JVM原理、Spring框架、Spring Boot及项目实战,助你从入门到进阶,系统掌握Java编程技能,提升实战开发能力。
218 0
|
4月前
|
存储 安全 Java
从基础语法到实战应用的 Java 入门必备知识全解析
本文介绍了Java入门必备知识,涵盖开发环境搭建、基础语法、面向对象编程、集合框架、异常处理、多线程和IO流等内容,结合实例帮助新手快速掌握Java核心概念与应用技巧。
115 0
|
8月前
|
缓存 安全 Java
java面试-基础语法与面向对象
本文介绍了 Java 编程中的几个核心概念。首先,详细区分了方法重载与重写的定义、发生阶段及规则;其次,分析了 `==` 与 `equals` 的区别,强调了基本类型和引用类型的比较方式;接着,对比了 `String`、`StringBuilder` 和 `StringBuffer` 的特性,包括线程安全性和性能差异;最后,讲解了 Java 异常机制,包括自定义异常的实现以及常见非检查异常的类型。这些内容对理解 Java 面向对象编程和实际开发问题解决具有重要意义。
|
8月前
|
运维 Cloud Native Java
postman发起post请求遇到报错:java.io.FileNotFoundException (文件名、目录名或卷标语法不正确。)
遇到bug报错,多猜可能的原因,控制变量反复测试,直至找到问题的关键,然后再思考如何解决或者回避。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来
|
11月前
|
Java
java do while 的语法怎么用?
java do while 的语法怎么用?
337 3
|
Java 编译器 Android开发
Kotlin语法笔记(28) -Kotlin 与 Java 混编
本系列教程详细讲解了Kotlin语法,适合需要深入了解Kotlin的开发者。对于希望快速学习Kotlin的用户,推荐查看“简洁”系列教程。本文档重点介绍了Kotlin与Java混编的技巧,包括代码转换、类调用、ProGuard问题、Android library开发建议以及在Kotlin和Java之间互相调用的方法。
222 1