最近在写一个Java程序时遇到一个问题,就是如何在Java里面输入数值,又叫做获取键盘输入值。

因为c语言里面有scanf(),C++里面有cin(),python里面有input()。Java里面有三种方法:

First:从控制台接受一个字符并打印

import java.io.*;
import java.io.IOException; public class test {
public static void main(String args[]) throws IOException{
   char word = (char)System.in.read();
   System.out.print("Your word is:" + word);
   }
}

这种方式只能在控制台接受一个字符,同时获取到的时char类型变量。另外补充一点,下面的number是int型时输出的结果是Unicode编码。

import java.io.*;
import java.io.IOException; public class test {
public static void main(String args[]) throws IOException{
   int number = System.in.read();
   System.out.print("Your number is:" + number);
   }
}

Second:从控制台接受一个字符串并将它打印出来。这里面需要使用BufferedReader类和InputStreamReader类。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader; public class test {
public static void main(String args[]) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = null;
str = br.readLine();
System.out.println("Your value is :" + str);
} }

通过这个方式能够获取到我们输入的字符串。这里面的readLine()也得拿出来聊一聊。

Third:使用Scanner类。

import java.util.Scanner;

public class CSU1726 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的姓名:");
String name = sc.nextLine();
System.out.println("请输入你的年龄:");
int age = sc.nextInt();
System.out.println("请输入你的工资:");
float salary = sc.nextFloat();
System.out.println("你的信息如下:");
System.out.println("姓名:"+name+"\n"+"年龄:"+age+"\n"+"工资:"+salary);
} }

这段代码已经表明,Scanner类不管是对于字符串还是整型数据或者float类型的变量,它都能够实现功能。

But:上面这个方法要注意的是nextLine()函数,在io包里有一个

import java.util.Scanner;

public class CSU1726 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的年龄:");
int age = sc.nextInt();
System.out.println("请输入你的姓名:");
String name = sc.nextLine();
System.out.println("请输入你的工资:");
float salary = sc.nextFloat();
System.out.println("你的信息如下:");
System.out.println("姓名:"+name+"\n"+"年龄:"+age+"\n"+"工资:"+salary); }

  

上面两段代码主要区别在于,这段代码先执行nextInt()再执行nextLine(),而第三种方法的例子是相反的。当你在运行着两段代码的时候你会发现第三种方法的例子可以实现正常的输入,而这段代码却在输入年龄,敲击enter键后,跳过了输入姓名,直接到了输入工资这里,(可以自己运行代码看看)。
这背后的原因是,在执行完nextInt()函数之后,敲击了enter回车键,回车符会被nextLine()函数吸收,实际上是执行了nextLine()函数吸收了输入的回车符(并不是没有执行nextLine函数),前面讲到和nextLine()功能一样的函数next(),他们的区别就在于:next()函数不会接收回车符和tab,或者空格键等,所以在使用nextLine()函数的时候,要注意敲击的回车符是否被吸收而导致程序出现bug。
 
最后的总结:next()和nextLine()的区别

在java中,next()方法是不接收空格的,在接收到有效数据前,所有的空格或者tab键等输入被忽略,若有有效数据,则遇到这些键退出。nextLine()可以接收空格或者tab键,其输入应该以enter键结束。

  

Java中的“scanf()、cin()、input()"的更多相关文章

  1. Java中的IO流,Input和Output的用法,字节流和字符流的区别

    Java中的IO流:就是内存与设备之间的输入和输出操作就成为IO操作,也就是IO流.内存中的数据持久化到设备上-------->输出(Output).把 硬盘上的数据读取到内存中,这种操作 成为 ...

  2. Java中的输入"scanf",Scanner用法

    1.输入程序 1)Scnner的初始用法: 1 import java.util.Scanner; 2 public class Textone { 3 public static void main ...

  3. Java中获取键盘输入值的三种方法

    Java中获取键盘输入值的三种方法     Java程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值 ...

  4. Java中Scanner类和BufferReader类之间的区别

    java.util.Scanner类是一个简单的文本扫描类,它可以解析基本数据类型和字符串.它本质上是使用正则表达式去读取不同的数据类型. Java.io.BufferedReader类为了能够高效的 ...

  5. Java中BufferedReader、InputStreamReader、Scanner和System.in区别

    Java中获取键盘输入值的方法以前写算法都是C/C++写的,现在用Java写,虽然算法是独立于语言的,但是Java从键盘获取输入确实有些不一样.在C/C++中我们可以用scanf和cin来获取用户从键 ...

  6. JAVA中获取键盘输入的方法总结

    Java程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值的现成函数!下面介绍三种解决方法: 方法一: ...

  7. 转:Java中Scanner类和BufferReader类之间的区别

    原文地址:https://blog.csdn.net/u014717036/article/details/52227782 java.util.Scanner类是一个简单的文本扫描类,它可以解析基本 ...

  8. JAVA中关于大数问题

    这里只是java速成,只限于java语法,包括输入输出,运算处理,字符串和高精度的处理,进制之间的转换等,能解决OJ上的一些高精度题目. 一.样例:java中的输出a+b import java.io ...

  9. Java中大数的使用与Java入门(NCPC-Intergalactic Bidding)

    引入 前几天参加湖南多校的比赛,其中有这样一道题,需要使用高精度,同时需要排序,如果用c++实现的话,重载运算符很麻烦,于是直接学习了一发怎样用Java写大数,同时也算是学习Java基本常识了 题目 ...

随机推荐

  1. PMBOK 指南 第三章 项目经理的角色

    项目经理的角色 3.1 概述 项目经理类似于交响乐团的指挥 成员与角色 在团队中的职责 知识和技能:具备项目管理知识.技术知识.理解和经验. 3.2 定义 项目经理是由执行组织委派,领导团队实现项目目 ...

  2. YII2中andWhere多个or查询

    使用多个or的复杂查询: AND ((`name`='张三') OR (`name`='李四') OR (`name`='王五')) // AND ((`name`='张三') OR (`name`= ...

  3. 分布式图数据库 Nebula RC2 发布:增强了 CSV Importer 功能

    Nebula Graph 是开源的分布式图数据库,可应用于知识图谱.社交推荐.风控.IoT 等场景. 本次 RC2 主要新增 GO FROM ... REVERSELY 和 GROUP BY 等语句, ...

  4. torch 中各种图像格式转换

    PIL:使用python自带图像处理库读取出来的图片格式 numpy:使用python-opencv库读取出来的图片格式 tensor:pytorch中训练时所采取的向量格式(当然也可以说图片) PI ...

  5. bootstrap-table 常用总结-树形结构(展开和折叠)

    今天在工作的时候,遇到了一个需求,就是需要一键展开或者关闭树形结构.关于树形结构的不是很熟悉,然后去百度,结果也不是很准确.最后经过Google才找到.下面分享给大家 直接看代码: var flag ...

  6. VUE,基于vue-cli搭建创建vue项目

    前提:必须安装node.js,官方地址:https://nodejs.org/en/ 然后安装vue-cli 安装方式:cmd命令行安装:打开cmd命令符输入进行全局安装脚手架:npm install ...

  7. Cesium 动态绘制点线面(附源码下载)

    我写的这个点线面绘制融入了增删改的功能.其中可以通过手动点击地图进行动态绘制线面,也支持通过给定坐标数组来进行线面的增加.绘制好的线面,可以点击进行修改:以上介绍了我的大概的要给操作,下面以面的构建来 ...

  8. English:Root "tele"

    Xx_Introduction tele mean "far" mean"faar" cognate word have tele\culture\tel\pa ...

  9. JS高级教程

    JS高级教程 JS高级教程

  10. 18c & 19c Physical Standby Switchover Best Practices using SQL*Plus (Doc ID 2485237.1)

    18c & 19c Physical Standby Switchover Best Practices using SQL*Plus (Doc ID 2485237.1) APPLIES T ...