Java中Scanner对象中hasNext()与next()XXX的常见问题方法

最近复习Java遇到了这样一个神奇的现象:

代码如下

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc =new Scanner(System.in);
        System.out.println("------bg--------");
        while(sc.hasNext()  ){
            System.out.print("请输入值:");
            int num = sc.nextInt();
            //String name=cin.next(); 换成String也是一样的
            //Syscstem.out.println(num);
        }
        System.out.println("------ed--------");
        sc.close();
    }
}

你会发现他出现的结果和你预想的不一样(????先输入?????然后才打印????)

(ps:因为我用的idea 的控制台,多次输入的结束的方法为 ctrl +d)

原因分析:

1>sc.hasNext()和sc.nextXXX()都可以用来输入,并且通过测试可以发现

sc.hasNext()----输入值后返回的类型为-----boolean

sc.nextInt() ------输入值后返回的类型为-----int

sc.nextDouble() ------输入值后返回的类型为-----double

sc.next() ------返回的是你输入的那个值

因此对我们的程序进行分析

sc.hasNext()    可以理解为   把我们输入的值  存到了   sc    当中

而   sc.next()     可以理解为   从  sc  中取值,取值后将标识符后移(可以理解为:取完值后这个值就不在了),

注意: 如果 sc 中没有值(sc.hasNext() 没有输入值) ,sc.next()也会要求输入 一个值(前面说了它们两都可以输入)。

解决办法:

针对这一的情况,为了达到我们预期的目的:

我暂时想到如下方法:

直接看代码

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc =new Scanner(System.in);
        System.out.println("------bg--------");
        System.out.print("请输入值:");//1.放到外面
        while(sc.hasNext()  ){
            int num = sc.nextInt();
            //String name=cin.next(); 换成String也是一样的
            //Syscstem.out.println(num);
            //System.out.print("请输入值:");            //2.如果需要重复输出的话,去掉注释
        }
        System.out.println("------ed--------");
        sc.close();
    }

}

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章