栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java基础——Java的输入(Scanner对象的使用)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java基础——Java的输入(Scanner对象的使用)

文章目录
  • 前言
  • 读入一个字符
  • 构造Scanner对象,与标准输入流 System.in 关联
    • 读入整数
    • 读入字符串
  • 关于读整数和读字符串的先后顺序
  • 循环读取
    • `hasNext()`的坑

前言

Java的输入是比较麻烦的,而且存在一些"bug"
因为Java本来就不是用来开发控制台程序的,主要是后台开发
因为有时候是在前台传数据传到后台
所以其实很少读入数据

读入一个字符

System.int.read()可以读入一个字符,但是需要搭配异常处理
并且需要导入包

import java.io.IOException;//在最开头导入IOException包
//                                     这里需要抛出一个异常
public static void main(String[] args) throws IOException {
        System.out.print("Enter a char:");
        char i=(char)System.in.read();
        System.out.print("Your char is:"+i);
    }
构造Scanner对象,与标准输入流 System.in 关联

我们经常利用Scanner对象来读入数据
不过Scanner的使用 也需要导入包
在最开头导入包:import java.util.Scanner

代码:

Scanner scanner = new Scanner(System.in);// 这样就构造了一个Scanner对象
//并且与System.in相关联

理解:

构造的对象的名字叫 scanner
scanner就像一个流,里面存放了你输入键盘的内容
流中还有东西 就不会让你输入,会把流中的东西读走
注意:scanner其实是一种资源,使用完毕 最好关闭:scanner.close()
就像C中的文件关闭fclose()

读入整数

已经构建好Scanner对象:scanner
scanner.nextInt–>读入一个整数
nextInt就是把流中的内容转化为int 如果不能转 那么就报错

public static void main2(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int x=scanner.nextInt(); // 读入整数 用x接受
        System.out.println(x);  //输出整数
        //使用完毕之后 关闭scanner
        scanner.close();
    }

其他的读入类似
重点看一下读入字符串

读入字符串

读入字符串有两种方式:

  1. scanner.next()
  2. scanner.nextLine()

区别:

  • nextLine()表示读入一行,包括空格
  • next()遇到空格就会结束 空格后面的留在缓冲区会被 下一次的读取给读走
    当然做OJ的时候不用考虑这个问题,人家后台会给你处理好

使用next()的常见“坑”

  1. 如果我们使用scanner.next()读入“hello world”,由于next()遇到空格结束,因此此时缓冲区还存在你输入的 “world” 未被读走,如果我们接下来使用scanner.nextInt()读取整数,并不会先让你输入,因为此时缓冲区还有内容"world",所以他会把"world" 进行nextInt的转换, 而字符串肯定是不能转为int的
    所以就会报错!

所以我们一般使用的是 scanner.nextLine()

关于读整数和读字符串的先后顺序

如果我们 需要读取整数和字符串
一般先读字符串再读整数
为什么呢?
这也是Java输入的一个bug
先看例子:

  • 先读字符串,再读整数

分析:
因为nextLine()会读走换行符
其他的并不会
所以如果先读走整型,只是把可以转换成整型的数据都走了 剩下的呢?
–> 此时缓冲区还有n没有读走,这时候 nextLine就会读走换行符 输出就啥也没有,之后向下走一行
而 如果先读字符串就不存在这个问题

所以原则:如果是读整数和字符串,那么就先读字符串

循环读取

hasNextInt()
---->存在下一个整数
类似的还有hasNextchar()等

while(scanner.hasNextInt()){
			int n=scanner.nextInt();
			System.out.println(n);
		}

上面代码的意思就是 如果流中还有能转换成int类型的数据 那么进入循环

再IDEA中 按Ctrl + D 为停止
再OJ 中 这些不用管,题目要求输入n个整数 后台会帮我们处理的

hasNext()的坑

看这样一个代码
如果流中还有东西 就进入循环
但是:这种方法 只会判断流中是否还存在东西
有东西就进入循环
但是如果进入循环 数据无法被nextInt()转换 成int类型
就会报错
(不负责任的家伙)

如何避免?
还是使用hasNextInt()
直接在控制循环的条件位置 顺便检查了是否还有能够转化为想要的数据类型的内容

这里利用hasNextInt–>看下一个是否为整数,如果不是整数就不进入循环,不会报错

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/987955.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号