当前位置: 首页 > news >正文

ACM模式下Java读取控制台输入注意事项及输出规范化

背景

在ACM模式下。需要我们去接受输入的参数,一般是使用Scanner去读取控制台输入的参数System.in。
不熟悉的情况下,很容易出现问题,针对常见的问题做一个总结。

一、nextXxx

如next,nextInt,nextFloat,这些方法把(空格、制表符、换行符)当做分隔符。
这也就意味着,读取到的数据里面永远不会出现这些字符。
next:读取字符串
nextInt:读取整形
nextFloat:读取浮点数
在读取数据的时候,需要先读取到所需要的数据,一直到下一个字符是(空格、制表符或换行符),就会结束读取,前面读取到的就作为一个结果返回。光标就停在碰到的(空格、制表符或换行符)前面。
如果开头就是分隔符,会直接跳过,一直到读取到可读取的字符才算本次读取数据的开始
在结合nextIine方法使用的时候需要非常注意。

比如,空格分隔

输入:
1 2 3 4
一直都是调用nextInt读取数据,则第一个读取到的是1,第二个读取到的是2,第三个读取到的是3.

	public static void main(String[] args) {Scanner sc=new Scanner(System.in);int i = sc.nextInt();int s = sc.nextInt();System.out.println(i);System.out.println(s);}

在这里插入图片描述

输入:
1 2 3 4
比如先调用nextInt,这时候系统会读取1,然后判断到下一个字符是空格就停,光标停在1的后面,1和2中间空格的前面。如果这个时候调用nextLine来读取数据,则会把1和2中间的空格也读取到,读取到的数据就是空格2空格3空格4,如下:

	public static void main(String[] args) {Scanner sc=new Scanner(System.in);int i = sc.nextInt();String s = sc.nextLine();System.out.println(i);System.out.println(s);}

在这里插入图片描述

换行符分隔(重点)

输入如下:
2
4 1 2 3 4
比如先调用nextInt,然后再调用nextLine。那么调用nextLine会返回一个空字符串,因为2后面就是空,而nextLine读取的就是当前光标到当前行结束。如下图,
在这里插入图片描述

二、nextLine

这个命令只有判断到换行符才会结束读取数据,也就是说,读取的数据里面可以包括空格。
该命令会读取整行数据,具体是读取当前光标所在位置一直到遇到换行符结束,需要注意的是,使用nextLine会直接读取完这一行,直到遇到换行符,就将光标切换到下一行。
也就是是不存在遇到了换行符,光标却还在当前行的情况。

区别

nextLine方法和上面的各种方法分隔符不同。
还有一个非常重要的区别,上面的各种命令都不会有读取到空字符串的情况,而nextLine存在读取到空字符串的情况。

判断控制台输入是否还有数据

有时候,控制台输入的参数数量并不是固定的,这个时候就需要判断是否还有下一个参数以及参数的数据类型。
如:scanner.hasNext,scanner.hasNextInt等。
如输入:
a
调用hasNextInt方法,系统会判断第一个参数是否是整型,第一个参数是a,不是整型,返回false;而如果调用的是hasNext,系统会判断第一个参数存在,返回true。
无论调用hasNext还是hasNextInt方法,在遇到后续没有参数的情况下都会返回false。

数据类型之间是可以隐式转换的,比如输入一个整型,读取的时候使用hasNextFloat来判断也会返回true。
但是存在小数的数据是无法强转整型的,输入浮点数,调用hasNextInt返回false。比如输入1.0,不会被识别成整型1

三、输出规范化

浮点数上下取整

Math.ceil:上取整
Math.floor:下取整
浮点数数据设置有效小数位数

格式化打印

可以使用String.format(“”,“”)实现占位符式格式化输出
第一个参数就是模板,利用一些特殊标识作为占位符,右侧的不定参数和第一个参数里的占位符一一对应。
字符串占位符刚好对应String的s开头,浮点和字符也都是这样。需要特殊记忆的就十进制整形%d和十六进制整形%x。

占位符含义
%s字符串占位符
%d十进制占位符
%f浮点数占位符
%x十六进制占位符,输入的数字会被识别为十进制并将其转化成十六进制进行输出
%c字符占位符,和字符串不能混,字符串是双引号,字符是单引号
http://www.lryc.cn/news/474361.html

相关文章:

  • 面试题整理 2
  • 华为自研仓颉编程语言官网上线 首个公测版本开放下载
  • NVR监测软件/设备EasyNVR多品牌NVR管理工具/设备对城市安全有哪些具体益处?
  • MFC工控项目实例二十八模拟量信号每秒采集100次
  • 安装scrcpy-client模块av模块异常,环境问题解决方案
  • 硅谷甄选(11)角色管理
  • C语言结构体 变量对齐原理
  • 【oracle】正则表达式
  • 如何找到网上爆款内容,快速复制扩大品牌声量
  • 补齐:相交链表:扣160
  • Java项目实战II基于Java+Spring Boot+MySQL的智能推荐的卫生健康系统(开发文档+数据库+源码)
  • NET Core的AOP实施方法1 DispatchProxy
  • AIGC生成式人工智能——泼天的富贵(三)
  • GetX的一些高级API
  • 【笔面试常见题:三门问题】用条件概率、全概率和贝叶斯推导
  • 刘艳兵-DBA011-应用使用Oracle数据库,必须启动哪些服务?
  • 注释多行代码的vim插件
  • Docker 安装HomeAssistant智能家居系统
  • 21 Docker容器集群网络架构:四、Docker集群网络验证
  • 【Kaggle | Pandas】练习5:数据类型和缺失值
  • 《YOLO 目标检测》—— YOLO v4 详细介绍
  • Ubuntu:通过ssh链接另外一台Ubuntu
  • 黄山谷捷提交创业板IPO注册,募资扩产提升综合竞争力
  • (python)如何进行加密
  • 夸克网盘免费扩容 20T 福利,无限次叠加,亲测有效
  • 开源协议类型及长安链开源协议介绍
  • SQL Server 可观测最佳实践
  • 青少年编程能力等级测评CPA Python编程(一级)
  • WebSocket 连接频繁断开的问题及解决方案
  • [CSP篇] CSP2024 游记(上)