五、Java控制流程

Java流程控制*

用户交互Scanner、Scanner进阶使用

用户交互Scanner

​ 之前我们学习的基本语法中我们并没有实现程序和人的交互,但是Java给我们提供了这样一个工具类,我们可以获取用户的输入。java.util.Scanner 是java5的新特征, 我们可以通过Scanner类来获取用户的输入

基本语法:

Scanner s = new Scanner(System.in);
//有些代码大家可能不理解,比如这个new,大家目前先不用理解代码的意思,先学会跟着操作,之后我们讲面向对象的时候你就会逐一明白这些代码每一个具体的意思

​ 通过 Scanner 类的 next()nextLine() 方法获取输入的字符串,在读取前我们一般需要使用 hasNext()hasNexLine() 来判断是否还有输入的数据。

​ 下面我们来实践一下加深理解和记忆

使用next方式读取:

package com.xiaodi.operator.scanner;

import java.util.Scanner;

public class Demo01 {
    public static void main(String[] args){
        //创建一个扫描器对象 用于接收键盘数据
        //使用IDEA开发工具输入Scanner之后回车,它就会自动导入这个类import java.util.Scanner;
        //我们之前一直用的是System.out是输出;System.in是输入
        //这里引用了Scanner数据类型
        //通过new Scanner(System.in);接收用户的输入,并且把它封装成了scanner对象
        Scanner scanner = new Scanner(System.in);

        //输出一行字
        System.out.println("使用next()方法接收:");

        //判断用户有没有输入字符串
        //if语句还没学,if就是如果的意思
        //如果scanner这个对象有没有用户输入,(==true不写就是默认上节课讲过,一般新手才会加)有的话就使用执行里面的语句
        if (scanner.hasNext()){
            //使用next方式接收用,并封装给数据类型为String的str变量
            String str = scanner.next();
            //输出用户输入的内容
            System.out.println("输入的内容为:"+str);
        }
        //凡是属于IO流的类如果不关闭会一直占用资源,要养成好习惯用完就关
        scanner.close();
    }
}

​ 我们运行起来之后,他会显示使用next方式读取,然后等待你输入字符串,我输入hello world返回输入的内容为:hello;然后程序结束

​ String str = scanner.next();这句代码执行完程序会等待用户输入完毕,如果你没去输入数据那么程序就会一直卡在那

​ 但是有没有发现我们输入的hello world它只输出了一个hello

刚才我们使用的是next(),现在我们使用nextLine()试一下:

package com.xiaodi.operator.scanner;

import java.util.Scanner;

public class Demo02 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("使用nextLine()方法读取:");
        if (scanner.hasNext()) {
            //使用nextLine()方式读取,并封装给数据类型为String的str变量
            String str = scanner.nextLine();
            System.out.println("输入的内容为:"+str);
        }
        scanner.close();
    }
}

这次输入hello world,返回的也是hello world

那我们来看一下 next()和nextLine()两种接收用户输入到底有上面区别

next():

  1. 一定要读取到有效字符后才可以结束输入。
  2. 对输入有效符之前遇到的空白,next()方法会自动去掉

​ 例如我输入: hello;则返回:hello

  1. 只有输入有效字符后才将其后面输入的空白作为分隔符或结束符
  2. next() 不能读取带有空格的字符串

nextLine():

  1. 以Enter为结束符,也就说 nextLine()方法返回的是输入回车之前的所有字符
  2. 可以获得空白

我们还没有学习到if上面的代码看起来会比较复杂,我下面写一个不用if语句和判断用户输入方法的的代码,让大家 自己分析,我就不写注释了

package com.xiaodi.operator.scanner;

import java.util.Scanner;

public class Demo03 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入数据:");

        String str = scanner.nextLine();
        System.out.println("输入的内容为:"+str);

        scanner.close();
    }
}

以上内容请务必掌握!!!

Scanner进阶使用

万一我们需要用户输入指定类型的数据,那该怎么判断用户输入的是否是我们指令类型的数据

我们在IDEA定义好scanner对象后;输入scanner.后会跳出很多方法出来

比如scanner.hasNextInt() :这样就是判断是否输入的是Int类型;这样我们就能配合if…else…语句来使用;if…else…就是如果就否则就的意思。

读取数据的方法也要变成scanner.nextInt()

下面我们来演示一下

package com.xiaodi.operator.scanner;

import java.util.Scanner;

public class Demo04 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int i = 0;
        float f = 0.0F;

        //提示用户输入
        System.out.println("请输入数据:");

        //使用hasNextInt()方法判读用户输入的数据是否为Int类型
        if (scanner.hasNextInt()) {
            //使用nextInt()方法读取Int数据,并赋值给i(这里因为i我们上面已经定义了所以不用在指定类型)
            i = scanner.nextInt();
            System.out.println("输入的数据为:"+i);
        }else {
            System.out.println("请输入整数类型的数据!");
            String a = scanner.nextLine();
        }

        //提示用户输入
        System.out.println("请输入数据:");
        //使用hasNextFloat()方法判读用户输入的数据是否为Float类型
        if (scanner.hasNextFloat()) {
            //使用nextFloat()方法读取float数据,并赋值给f(这里因为f我们上面已经定义了所以不用在指定类型)
            f = scanner.nextFloat();
            System.out.println("输入的数据为:"+f);
        }else {
            System.out.println("请输入小数类型的数据!");
        }
        scanner.close();
    }
}

运行的结果为:

第一种情况:

​ 请输入数据:
​ 1
​ 输入的数据为:1
​ 请输入数据:
​ 1.2
​ 输入的数据为:1.2

第二种情况

请输入数据:
xiaodi
请输入整数类型的数据!

请输入数据:
xiaodi
请输入小数类型的数据!

有没有发现我在第一个if…else…语句中的else中加了一行代码

String a = scanner.nextLine();
    你不加这行代码的话,你运行起来,你第一个数据输入错误了,它会直接将第一个数据拿到第二次做判断,导致你第二次不能输入数据。(但是有的地方会有需要这种情况,但是我们这里测试的话就不用了)

案例:

​ 我们可以输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入输入非数字来结束输入并输出执行结果

package com.xiaodi.operator.scanner;

import java.util.Scanner;

public class Demo05 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        //和,有可能会输入小数,所以使用double类型
        double sum = 0.0;
        //个数,因为最后要求平均值,平均值就是和除以个数
        int m = 0;

        //使用while循,判断是否输入数字,如果是就一直循环获取用户输入,如果不是则退出循环
        while (scanner.hasNextDouble()) {
            //获取用户输入,并赋值给i
            double i = scanner.nextDouble();
            //把和加上获取的输入
            sum = sum + i;
            //个数加1
            m = m + 1;//m++
            System.out.println("您输入了第"+m+"个数据当前的总和为:"+sum);
        }
        //输出总和和平均数
        System.out.println("您输入的数据的总和为:"+sum);
        System.out.println("您输入的数据的平均数为:"+(sum / m));

        scanner.close();

    }
}

运行结果:

​ 10.5
​ 您输入了第1个数据当前的总和为:10.5
​ 19.5
​ 您输入了第2个数据当前的总和为:30.0
​ 30
​ 您输入了第3个数据当前的总和为:60.0
​ 40
​ 您输入了第4个数据当前的总和为:100.0
​ x
​ 您输入的数据的总和为:100.0
​ 您输入的数据的平均数为:25.0

其中while循环还不懂没关系,你先跟着我的代码写一遍,等一下学到你再回来看一下,你就会恍然大悟,原来是这个样子的!

顺序结构

  • Java的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行
  • 顺序结构是最简单的算法结构
  • 语句与语句之间,框与框之间是按从上到下的顺序进行的,它是又若干个依次执行的处理步骤组成的, *它是任何一个算法都离不开的一种基本算法结构

选择结构*

if选择结构

if单选择结构

​ 我们很多时候需要去 判断一个东西是否可行,然后我们才去执行,这样一个过程在程序中用if语句来表示

语法:

if (布尔表达式) {
    //如果布尔表达式为true将执行的语句,如果为false则跳过if语句
}

演示:

package com.xiaodi.operator.struct;

import java.util.Scanner;

public class Demo01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入内容:");
        String s = scanner.nextLine();

        //equals:判断字符串是否一致的方法,是字符串的一种方法
        if (s.equals("Hello")) {
            System.out.println(s);
        }

        System.out.println("End");

        scanner.close();
    }
}

第一次输入Hello则 执行if语句结果如下:

​ 请输入内容:
​ Hello
​ Hello
​ End

第二次输入XiaoDi则 跳过if语句结果如下:

​ 请输入内容:
​ XiaoDi
​ End

if双选择结构

​ 那现在有一个需求,学校要一个输入分数来判定学生成绩是否及格的程序,>=60分为及格,

Original: https://www.cnblogs.com/xiaodi-CISP-PTE/p/15977626.html
Author: XiaoDi_CISP-PTE
Title: 五、Java控制流程

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/580988/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • ArrayList源码分析

    ArrayList源码分析 默认大小 // 根据传入的初始化大小创建对应的数组大小 public ArrayList(int initialCapacity) { if (init…

    Java 2023年6月16日
    074
  • spring boot设置日志打印为控制台输出和文件输出

    日志打印 sources里建 logback-spring.xml ${CONSOLE_LOG_PATTERN} ${CONSOLE_LOG_CHARSET} ${FILE_LOG…

    Java 2023年6月14日
    095
  • SpringBoot源码学习1——SpringBoot自动装配源码解析+Spring如何处理配置类的

    系列文章目录和关于我 一丶什么是SpringBoot自动装配 SpringBoot通过SPI的机制,在我们程序员引入一些starter之后,扫描外部引用 jar 包中的 META-…

    Java 2023年6月14日
    067
  • Java基础知识25–ThreadLocal使用详解

    1.ThreadLocal简介 多线程访问同一个共享变量的时候容易出现并发问题,特别是多个线程对一个变量进行写入的时候,为了保证线程安全,一般使用者在访问共享变量的时候需要进行额外…

    Java 2023年5月29日
    0172
  • Nginx 源码分析– 模块module 解析执行 nginx.conf 配置文件流程分析 一

    搭建nginx 服务器时,主要的配置文件nginx.conf 是部署和维护服务器人员经常要使用到的文件, 里面进行了许多服务器参数的设置。那么nginx 以模块module 为骨架…

    Java 2023年6月15日
    073
  • MySQL删除重复数据

    重复数据如图所示 自关联,保留id最小的那一条,其它的都删除 DELETE t1 FROM invest_year t1, invest_year t2 WHERE t1.pro_…

    Java 2023年6月7日
    079
  • Java中代码块的理解

    静态、实例代码块 静态代码块,在类加载之前会加载一次,可以用来初始化静态资源 实例代码块,每次调用构造器初始化对象的时候,都要执行一次。其实质是放到构造器方法中执行。可以用来初始化…

    Java 2023年6月15日
    052
  • springBoot 日志中关于profiles设置的源码解读

    在启动SpringBoot应用是看到到如下日志,于是出于好奇查看了下源代码: 首先,StartpInfoLogger类,采用jcl-over-slf4j【即Apache Commo…

    Java 2023年5月30日
    097
  • java 浅拷贝和深拷贝

    java 浅拷贝和深拷贝 java 浅拷贝和深拷贝 简单理解: 拷贝基本数据类型 拷贝引用类型 浅拷贝: 深拷贝: 不可变类的特殊性: 简单理解: 浅拷贝:拷贝地址。原变量改变,新…

    Java 2023年6月16日
    087
  • 对象创建过程

    通常情况下,我们创建一个对象,只需要使用new关键字即可。而对于java虚拟机来说,需要经历一系列过程。首先,需要找到对应的类是哪个,这个类是否已经加载,没有加载还需要将它先加载进…

    Java 2023年6月9日
    068
  • 邻接矩阵有向图(三)之 Java详解

    邻接矩阵有向图是指通过邻接矩阵表示的有向图。 上面的图G2包含了”A,B,C,D,E,F,G”共7个顶点,而且包含了” 上图右边的矩阵是G2在内…

    Java 2023年5月29日
    066
  • java调用python脚本,生成excel

    java: 1 /** 2 * 使用python创建excel并且输出 3 * @throws Exception 4 */ 5 public void pyExportExcel…

    Java 2023年6月16日
    068
  • websocket在线测试工具

    为了测试websocket, 根据网上的一些工具修改了一些, 因此得到了这个工具 源码 源码: websocket在线测试工具 WS WS WSS 发送 连接 清屏 断开 … …

    Java 2023年6月7日
    075
  • 自定义视图(组合控件)

    前言 Android自定义控件主要分为两种,一种是通过继承View来实现自定义控件,另一种是通过组合已有到控件来实现自定义控件,上篇文章自定义视图(继承View)我们介绍了下继承V…

    Java 2023年6月7日
    088
  • [nginx] nginx源码分析–内存管理

    nginx的内存,都是内存池管理,创建一个内存池就malloc一块内存出来. 两个重要的地方会新建内存池, 一个新连接建立的时候, 一个是request创建的时候. 在内存池里申请…

    Java 2023年5月30日
    067
  • SpringBoot映射虚拟图片路径

    各位看官可以关注博主个人博客,了解更多信息。作者:Surpasser链接地址:https://surpass.org.cn 前言 ​ 我的毕设项目中涉及到了多媒体表单提交,以我本来…

    Java 2023年6月7日
    088
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球