最近复习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();
}
}