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字符占位符,和字符串不能混,字符串是双引号,字符是单引号

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/906198.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一键切换暗黑模式,这些代码片段你不可错过

文章目录 前言正文1.多主题切换2.使用 SASS 实现轻松深色模式3.动画切换浅色与深色模式4.纯 CSS 主题切换5.GitHub 风格的深色模式切换6.持久深色模式7.基本 Vue 响应式切换8.创意灯泡切换 总结 前言 如今,许多网站设计师都会为用户提供浅色和深色模式的选择。这不…

Spring之依赖注入(DI)和控制反转(IoC)——配置文件、纯注解

依赖注入 依赖注入(Dependency Injection,简称 DI)与控制反转(loC)的含义相同,只不过这两 个称呼是从两个角度描述的同一个概念。对于一个 Spring 初学者来说,这两种称呼很难理解, 下面我们将通过简单的语言来描述这两个概念。 当Java对象&…

Node.js:内置模块

Node.js:内置模块 Node.jsfs模块读取文件写入文件__dirname path模块路径拼接文件名解析 http模块创建服务 Node.js 传统的JavaScript是运行在浏览器的,浏览器就是其运行环境。 浏览器提供了JavaScript的API,以及解析JavaScript的解析引擎&a…

什么是工单管理系统?最全百科

在现代企业的客户服务和支持过程中,工单管理系统扮演着至关重要的角色。它不仅帮助企业高效地处理客户请求,还能提升客户满意度和忠诚度。本文将深入探讨工单管理系统的定义、功能、优势,并推荐使用Zoho Desk作为理想的解决方案。 一、工单管…

橙子电视 1.02 | 无广告,高清秒播,频道丰富

橙子电视版是针对智能电视和电视盒子而开发的一款在线观看电视应用软件,目前已经更名为橙色电视Live。该软件最大的特色是完全免费,并且支持几乎国内所有的电视台,无论是央视频道,还是省卫视频道应有尽有。同时为了更好的服务用户…

C++模拟实现list

C教学总目录 C模拟实现list 1、成员变量2、迭代器3、insert函数4、erase函数5、pop_back、push_front、pop_front函数6、size和clear函数7、析构函数8、拷贝构造函数9、赋值运算符重载完整代码(包含测试代码) 1、成员变量 先来看看SGI版本STL中list的实…

《高频电子线路》 —— 反馈型振荡器

文章内容来源于【中国大学MOOC 华中科技大学通信(高频)电子线路精品公开课】,此篇文章仅作为笔记分享。 反馈型振荡器基本工作原理 振荡器分类 自激:没有信号输入他激:有信号输入RC振荡器主要产生低频的正弦波&#x…

如何在Linux下安装和配置Docker

文章目录 安装前的准备在Debian/Ubuntu上安装Docker添加Docker仓库安装Docker验证安装 在CentOS/RHEL上安装Docker安装必要的软件包设置Docker仓库安装Docker启动Docker服务 Docker的基本使用拉取一个镜像运行一个容器 配置Docker创建Docker目录使用非root用户运行Docker 结语 …

1-petalinux 问题记录-根文件系统分区问题

在MPSOC上使用SD第二分区配置根文件系统的时候,需要选择对应的bootargs,但是板子上有emmc和sd两个区域,至于配置哪一种mmcblk0就出现了问题,从vivado中的BlockDesign和MLK XCZU2CG原理图来看的话,我使用的SD卡应该属于…

分类算法——支持向量机 详解

支持向量机(Support Vector Machine, SVM)的底层原理 支持向量机是一种用于分类和回归的强大机器学习算法,最常见的是用于二分类任务。SVM 的核心思想是通过找到一个最优超平面,将数据集划分成不同的类别。SVM 尤其擅长处理高维数…

系统集成项目管理工程师考试时间

系统集成项目管理基础知识考试信息 题量:共 75 道题。考试时间:该科目考试时间为上午 8:30 - 12:30(或下午 14:30 - 18:30,但通常为上午)。基础知识科目最短作答时长 90…

微服务实战系列之玩转Docker(十六)

导览 前言Q:基于容器云如何实现高可用的配置中心一、etcd入门1. 简介2. 特点 二、etcd实践1. 安装etcd镜像2. 创建etcd集群2.1 etcd-node12.2 etcd-node22.3 etcd-node3 3. 启动etcd集群 结语系列回顾 前言 Docker,一个宠儿,一个云原生领域的…

【论文解读】Med-BERT: 用于疾病预测的大规模结构化电子健康记录的预训练情境化嵌入

【论文解读】Med-BERT: 用于疾病预测的大规模结构化电子健康记录的预训练情境化嵌入 Med-BERT:pretrained contextualized embeddings on large-scale structured electronic health records for disease prediction ​ ​ 摘要:基于电子健康记录(EHR)的深度学习(DL)预…

API接口开放与安全管控 - 原理与实践

API安全是接口开放的前提条件 在API对外开放时,确保其安全性至关重要,因为API直接暴露给外部环境,容易成为攻击目标。一旦被恶意利用,可能导致数据泄露、服务滥用等严重后果。因此,通过API网关实施严格的接口安全管理…

python实现钉钉群机器人消息通知(消息卡片)

直接上代码 python """ 飞书群机器人发送通知 """ import time import urllib3 import datetimeurllib3.disable_warnings()class DingTalkRobotAlert():def __init__(self):self.webhook webhook_urlself.headers {Content-Type: applicatio…

32位汇编——通用寄存器

通用寄存器 什么是寄存器呢? 计算机在三个地方可以存储数据,第一个是把数据存到CPU中,第二个把数据存到内存中,第三个把数据存到硬盘上。 那这个所谓的寄存器,就是CPU中用来存储数据的地方。那这个寄存器有多大呢&a…

强大的接口测试可视化工具:Postman Flows

Postman Flows是一种接口测试可视化工具,可以使用流的形式在Postman工作台将请求接口、数据处理和创建实际流程整合到一起。如下图所示 Postman Flows是以API为中心的可视化应用程序开发界面。它提供了一个无限的画布用于编排和串连API,数据可视化来显示…

JavaScript 实战技巧:让你成为前端高手的必备知识3(进阶版)

一、DOM概述 (一)DOM操作 是指使用‌JavaScript操作文档对象模型(Document Object Model)的过程。‌文档对象模型是一种表示网页文档结构的方式,它将整个网页文档表示为一个树形结构,每个元素都是一个节点…

Python 网络爬虫教程:从入门到高级的全面指南

Python 网络爬虫教程:从入门到高级的全面指南 引言 在信息爆炸的时代,网络爬虫(Web Scraping)成为了获取数据的重要工具。Python 以其简单易用的特性,成为了网络爬虫开发的首选语言。本文将详细介绍如何使用 Python …

【抖音】a_bogus参数逆向分析

抖音回复评论: 点击——展开xxx条回复﹀就会出现 https://www.douyin.com/aweme/v1/web/comment/list/reply 直接搜又搜不到 分析调用堆栈 可以看到这个栈是有请求相关的数据的 上面一个栈 所以就是在bdms.js里面生成的 就在这里打上日志断点:“T…