前言
本次文章主要讲解的是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们。当然有不足的地方大家可以相互交流,一起进步,成为更棒的自己!!
|