IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> nextLine()与next()的区别以及hasNextInt()与next()在循环中的运用 -> 正文阅读

[数据结构与算法]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们。当然有不足的地方大家可以相互交流,一起进步,成为更棒的自己!!

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-04-22 19:01:27  更:2022-04-22 19:05:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 7:34:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码