Java中关于nextInt()、next()和nextLine()的理解

先看解释:

nextInt(): it only reads the int value, nextInt() places the cursor in the same line after reading the input.

next(): read the input only till the space. It can‘t read two words separated by space. Also, next() places the cursor in the same line after reading the input.

nextLine():  reads input including space between the words (that is, it reads till the end of line \n). Once the input is read, nextLine() positions the cursor in the next line.

看完之后nextInt()、next()和nextLine()的区别已经很清楚了,我觉得最容易出错的就是cursor问题。

看下面代码:

 1 import java.util.Scanner;
 2
 3 public class MaxMap {
 4     public static void main(String[] args){
 5         Scanner cin = new Scanner(System.in);
 6         int n = cin.nextInt();
 7         String str = cin.nextLine();
 8         System.out.println("END");
 9         }
10 }            

执行后结果:

从执行结果上看,貌似直接跳过了String str = cin.nextLine();这行代码。

其实不然,原因是:nextInt()只读取数值,剩下"\n"还没有读取,并将cursor放在本行中。nextLine()会读取"\n",并结束(nextLine() reads till the end of line \n)。

如果想要在nextInt()后读取一行,就得在nextInt()之后额外加上cin.nextLine(),代码如下

import java.util.Scanner;

public class MaxMap {
    public static void main(String[] args){
        Scanner cin = new Scanner(System.in);
        int n = cin.nextInt();
        cin.nextLine();
        String str = cin.nextLine();
        System.out.println("END");
        }
}

在看下面代码:

 1 import java.util.Scanner;
 2
 3 public class MaxMap {
 4     public static void main(String[] args){
 5         Scanner cin = new Scanner(System.in);
 6         String n = cin.next();
 7         //cin.nextLine();
 8         String str = cin.nextLine();
 9         System.out.println("END");
10         System.out.println("next()read:"+n);
11         System.out.println("nextLine()read:"+str);
12     }
13 }

执行结果:

 原因:next()只读空格之前的数据,并且cursor指向本行,后面的nextLine()会继续读取前面留下的数据。

    想要读取整行,就是用nextLine()。

    读取数字也可以使用nextLine(),不过需要转换:Integer.parseInt(cin.nextLine())。

注意在next()、nextInt()与nextLine()一起使用时,next()、nextInt()往往会读取部分数据(会留下"\n"或者空格之后的数据)。

时间: 2024-08-28 20:20:21

Java中关于nextInt()、next()和nextLine()的理解的相关文章

java学习笔记——Java中HashMap和TreeMap的区别深入理解

本文转载自Java中HashMap和TreeMap的区别深入理解 首先介绍一下什么是Map.在数组中我们是通过数组下标来对其内容索引的,而在Map中我们通过对象来对对象进行索引,用来索引的对象叫做key,其对应的对象叫做value.这就是我们平时说的键值对. HashMap通过hashcode对其内容进行快速查找,而 TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的). HashMap 非线程安全 

JAVA中关于set()和get()方法的理解及使用

对于JAVA初学者来说,set和get这两个方法似乎已经很熟悉了,这两个方法是JAVA变成中的基本用法,也是出现频率相当高的两个方法. 为了让JAVA初学者能更好的理解这两个方法的使用和意义,今天笔者来谈一下自己对这两个方法的理解,如果你对于这两个方法还有困惑甚至完全不知道这两个方法是做什么的,那你看下面这篇文章很有用.如果你对于set和get这两个方法已经很熟悉了,那么你完全不用看这篇文章.这篇文章是写给初学者的. 我们先来看看set和get这两个词的表面意思,set是设置的意思,而get是获

理解Java中的IO字节流(File的输入输出理解)

IO概念 什么是IO Java中IO操作主要是指使用java.io包下的内容,进行输入.输出操作.输入也叫做读取数据,输岀也叫做作写出数据. IO的分类 根据数据的流向分为:输入流和输出流. 输入流:把数据从其他设备上读取到内存中的流. 输出流:把数据从内存中写出到其他设备上的流. 格局数据的类型分为:字节流和字符流. 顶级父类们 字节流 一切文件数据(文本.图片.视频等)在存储时,都是以二进制数字的形式保存,都是一个ー个的字节,在传输时也是一样如此.所以,字节流可以传输任意文件数据.在操作流的

Java中HashMap和TreeMap的区别深入理解

首先介绍一下什么是Map.在数组中我们是通过数组下标来对其内容索引的,而在Map中我们通过对象来对对象进行索引,用来索引的对象叫做key,其对应的对象叫做value.这就是我们平时说的键值对. HashMap通过hashcode对其内容进行快速查找,而 TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的). HashMap 非线程安全 TreeMap 非线程安全 线程安全 在Java里,线程安全一般体

Java中HashMap和TreeMap的区别深入理解(转载)

首先介绍一下什么是Map.在数组中我们是通过数组下标来对其内容索引的,而在Map中我们通过对象来对对象进行索引,用来索引的对象叫 做key,其对应的对象叫做value.这就是我们平时说的键值对. HashMap通过hashcode对其内容进行快速查找,而 TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应 该使用TreeMap(HashMap中元素的排列顺序是不固定的). HashMap 非线程安全 TreeMap 非线程安全 线程安全 在Java里,线程安全一

java中静态代码块之我的理解

Demo1.funx(); String s=Demo1.string; //静态代码块 会在new一个该类对象时调用 或者调用该类的静态方法,静态成员变量时调用 总之在类加载器将该类加载到内存中时 (无论是通过哪种方式) 都会调用静态代码块 //静态成员变量 静态代码块永远只被初始化一次 无论new多少个对象 //加载类时 初始化顺序   静态成员->静态代码块 ->变量,初始化块->构造函数 //由于静态代码块永远只被加载一次的特性 //常被用来加载配置文件 等初始化操作(单例模式)

java中引用传递和值传递的理解

按值调用(call by value):表示方法接收的是调用者提供的值 按引用调用(call by reference):表示方法接收的是调用者提供的地址 一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用所对应的变量值 理解: 对于java来说,是不存在引用调用的,它总是按值调用 如何理解红字?方法是得到所有参数值的一个拷贝,方法无法修改传递给它的任何变量值的内容 示例1: public static void main(String[] args) { int temp = 0;

java中的成员变量,局部变量的理解

首先我们来理解什么是变量,依我来看,变量就是用来存放值的一个名字或者引用,比如年龄,性别,班级,学号,身份证号码等等.对于不同的对象当然有不一样数值.变量也有自己的属性,比如整数型,字符串类型,浮点型等等,基本数据类型和引用数据类型都可以.一个类里面有属性和方法,局部变量和成员变量的区别就输成员变量在类里面的作用区域是在整个类中使用.局部变量是指在方法里面的变量,作用域只在方法里面. 原文地址:https://www.cnblogs.com/yindong2019/p/11780599.html

Java中的字符串常量池

最近做到一个题目: 问题:String str = new String("abc"),"abc"在内存中是怎么分配的?    答案是:堆,字符串常量区. 题目考查的为Java中的字符串常量池和JVM运行时数据区的相关概念."abc"为字面量对象,其存储在堆内存中.而字符串常量池则存储的是字符串对象的一个引用. Java中的字符串常量池 Java中字符串对象创建有两种形式,一种为字面量形式,如String str = "droid&qu