nextLine()与next()的区别以及hasNextInt()与next()在循环中的运用


前言

本次文章主要讲解的是hasNextInt()与next()如何在循环中正确使用,以及next()与nextLine()的区别是什么。为了让大家更好的理解hasNextInt()与next()本文引用指针一说(虽java无指针一说)。


一、hasNextInt()与next()对“指针”操作的不同

未对指针进行操作时,指针的初始位置如下:
在这里插入图片描述
大家可以将其理解为数组,此时未对指针进行操作时,指针指向的是下标为0的上一处。
当调用Scanner中的hasNextInt()函数时会对下标为0的数进行判断,是否为Int类型的基本数据类型,而不移动指针!!!
当调用Scanner中的next()函数时,指针才会向下移动一格,到下标为0处。 如下图:在这里插入图片描述

二、代码演示

1.错误用法

代码如下(示例):

import java.util.Scanner;

public class TestTest {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        System.out.println("请输入账号");
        int i = 0;
        while (true){
           if(s.hasNextInt()){
                i = s.nextInt();
                System.out.println("成功!"+i);
                break;
            }else {
                System.out.println("只能是数字");
            }
        }
        System.out.println("i="+i);
    }
}

运行效果:
在这里插入图片描述
当我输入的是e而不是数字时,会循环打印“只能是数字”。
下面还是用图向大家解释一下。
在这里插入图片描述

此时的指针初始指向的是下标为0的上一处,当我输入e后下标为0处数据为e。进入while循环后,进行if判断,这时候就会调用hasNextInt()函数对下标为0的数据进行判断,发现它不是数字从而进入else。由于我们写的是死循环,就会对下标为0的数据一直进行判断,发现它不是数字从而疯狂输出“只能是数字”,可能大家看到这有点懵逼,莫慌,接下来讲讲如何解决,大家可能会清楚些。

1.正确用法

代码如下(示例):

import java.util.Scanner;

public class TestTest {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        System.out.println("请输入账号:");
        int i = 0;
        while (true){
           if(s.hasNextInt()){
                i = s.nextInt();
                System.out.println("成功!"+i);
                break;
            }else {
                System.out.println("只能是数字!");
                s.next();
            }
        }
        System.out.println("i="+i);
    }
}

运行效果:
在这里插入图片描述
这段代码我在else中添加了next()函数。这里还是以图片的形式给大家讲解:
这里是输入e后且并未执行else中的next()函数时指针的指向。
在这里插入图片描述

当我输入e时,0下标处数据为e,此时进入if判断,调用hasNextInt()函数后发现0下标处数据不是int数据类型的数据,进入else语句-----输出“只能是数字”。在调用next()函数,此时指针下移至0下标,并且等待数据输入。当再次在进入 if 判断,调用hasNextInt()函数是对下标为1的数据进行判断,发现此时并无数据,因此是等待数据输入,而不会在像上面那样疯狂输出“只能是数字”。
如下图所示:在这里插入图片描述
当我再次输入4时,此时下标1处的数据是4,调用hasNextInt()函数后发现1下标处数据是int数据类型的数据 ,因此进入if语句中,然后调用nextInt()函数,此时下标也会向下移动至下标1处,因此此时的 i 就是4。
如下图所示:
在这里插入图片描述

三、next()与nextLine()的区别

1、错误示范

代码如下(示例):

import java.util.Scanner;

public class TestTest {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        System.out.println("请输入账号");
      	String text = s.next();
        System.out.println("我是:"+text);
        String s1 = s.nextLine();
        System.out.println("s1的长度是:"+s1.length());
    }
}

运行效果:
在这里插入图片描述

2、正确示范

import java.util.Scanner;

public class TestTest {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        System.out.println("请输入账号");
      	String text = s.next();
        System.out.println("我是:"+text);
        s.nextLine();
        String s1 = s.nextLine();
        System.out.println("s1的长度是:"+s1.length());
    }
}

运行效果
在这里插入图片描述

3、小结

在错误示范中,当执行next()函数时,输入111后被接受打印”我是:111“。然后nextLine()函数就直接执行了,并且打印出了s1的长度为0。在正确示范中,我在next()函数后加了一个nextLine()函数,接下来的nextLine()函数便可以等待输入,当我输入33333后,输出”s1的长度是:5“。这是因为当你输入next×××(如:nextInt、nextDouble等)函数后,你需要敲击回车键使这一条语句执行,而当下一条语句为nextLine()时,nextLine()函数会读取该回车(错误示范就是如此)。而当第一条nextLine()函数读取完回车后,第二条nextLine()函数就无东西可以读取,因此就会等待输入。


四、总结

以上就是本人此次总结,希望可以帮助到各位uu们。当然有不足的地方大家可以相互交流,一起进步,成为更棒的自己!!

  • 24
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值