最近複習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();
}
}