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

文章目录

  • 前言
  • 一、hasNextInt()与next()对“指针”操作的不同
  • 二、代码演示
    • 1.错误用法
    • 1.正确用法
  • 三、next()与nextLine()的区别
    • 1、错误示范
    • 2、正确示范
    • 3、小结
  • 四、总结


前言

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


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

未对指针进行操作时,指针的初始位置如下:
nextLine()与next()的区别以及hasNextInt()与next()在循环中的运用_第1张图片
大家可以将其理解为数组,此时未对指针进行操作时,指针指向的是下标为0的上一处。
当调用Scanner中的hasNextInt()函数时会对下标为0的数进行判断,是否为Int类型的基本数据类型,而不移动指针!!!
当调用Scanner中的next()函数时,指针才会向下移动一格,到下标为0处。 如下图:nextLine()与next()的区别以及hasNextInt()与next()在循环中的运用_第2张图片

二、代码演示

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);
    }
}

运行效果:
nextLine()与next()的区别以及hasNextInt()与next()在循环中的运用_第3张图片
当我输入的是e而不是数字时,会循环打印“只能是数字”。
下面还是用图向大家解释一下。
nextLine()与next()的区别以及hasNextInt()与next()在循环中的运用_第4张图片

此时的指针初始指向的是下标为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);
    }
}

运行效果:
nextLine()与next()的区别以及hasNextInt()与next()在循环中的运用_第5张图片
这段代码我在else中添加了next()函数。这里还是以图片的形式给大家讲解:
这里是输入e后且并未执行else中的next()函数时指针的指向。
nextLine()与next()的区别以及hasNextInt()与next()在循环中的运用_第6张图片

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

三、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());
    }
}

运行效果:
nextLine()与next()的区别以及hasNextInt()与next()在循环中的运用_第9张图片

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());
    }
}

运行效果
nextLine()与next()的区别以及hasNextInt()与next()在循环中的运用_第10张图片

3、小结

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


四、总结

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

你可能感兴趣的:(intellij-idea)