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

}

 

 

 

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