必威体育Betway必威体育官网
当前位置:首页 > IT技术

Java中nextInt()后紧跟nextLine()方法造成的一些问题

时间:2019-09-11 04:41:04来源:IT技术作者:seo实验室小编阅读:51次「手机版」
 

nextint

遇到的问题:

public class Test {

    public static void main(String[] args) {
        scanner sc = new Scanner(System.in);
        int n = sc.nextint();
        
        String[] arr = new String[n];
        for (int i = 0; i < n; i++) {
            arr[i] =  sc.nextLine();
        }

        System.out.println(Arrays.toString(arr));
    }
}

先看这段代码,看上去很自然,n表示我们字符串数组的长度,for循环用于每个元素的输入,一般的同学们都会这样很自然地写。

我们运行后,在控制台如此输入:

3

a

b

c

你会发现,在输到b并按下回车时,还没等你输入c,控制台就输出结果了:

[, a, b]

这是为什么呢?

从表面来看输出结果,猜想应该是数组的第0个元素被系统写入了一个空字符或者转义字符之类的。

为了验证这个猜想我们在原来的程序中加一行代码:

public class Test {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        
        String[] arr = new String[n];
        for (int i = 0; i < n; i++) {
            arr[i] =  sc.nextLine();
        }
        System.out.println(arr[0]); // 输出首个元素看看
        System.out.println(Arrays.toString(arr));
    }
}

输入不变,输出为:

[, a, b]

我们可以看出,第一行有换行符,说明那个arr[0]其实就是\n


验证完了最后我们再去看看官方文档:

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.(读取包括空格在内的输入,而且还会读取行尾的换行字符\n,读取完成后光标被放在下一行

如此一来,我们就非常清晰了,也就是说这个nextLine()方法如其名,会读取当前这一整行包括换行符。

每一次读取过程是从光标位置开始的。所以,一开始那个程序当我们输入3并按下回车,由于nextInt()方法只读取数值而不会读取换行符,所以光标停在了3和\n之间,然后for循环中的第一次nextLine()方法把3后面的换行符\n读取掉了,并把光标弹到下一行,这个时候才开始读取你输入的a字符。最后,才造成了arr[0]的内容其实是一个换行符。

所以我们为了正确地完成最初的输入,程序应该这样写:

public class Test {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        sc.nextLine(); // 读掉数值后面的换行符
        String[] arr = new String[n];
        for (int i = 0; i < n; i++) {
            arr[i] =  sc.nextLine();
        }
        
        System.out.println(Arrays.toString(arr));
    }
}

相关阅读

支付宝账号注销了可以再注册吗?重新注册支付宝方法

支付宝在现在几乎每个人都有注册使用,很多人由于认为自己的支付宝账号不会再使用,于是便将这个账号进行注销。然而等到到后面需要的

淘宝怎样刷钻?刷钻的方法步骤有什么?

很多人不知道其实做淘宝刷手有很多分类,比如淘宝刷单、刷钻、刷信誉等等。关于淘宝刷单的相关内容,seo实验室小编已经分享过很多了,

Axure中继器:实现“万能”数据表模板的方法

看过很多关于中继器的文章,但如果想要自己做一个,就要东搞西搞的,为了给很多“懒人”带来方便,本文要介绍的是一款通过简单修改,就可以

淘宝哇哦视频怎么刷点击?有什么方法?

最近手机淘宝里面更新了很多功能,当你更新手机淘宝为最新的版本您就会知道了,比如说淘宝哇哦视频就是其中的一种功能了,大家在这里可

淘宝网店推广有哪些常见有效方法?

淘宝现在是我国最大的电子购物平台,可谓是商家必争之地,现在淘宝大约有200多万卖家,而且每天都新的卖家来此开店,无数人正蓄意进军淘

分享到:

栏目导航

推荐阅读

热门阅读