java Scanner读取输入 nextInt

来源:互联网 发布:汽车导航端口检测工具 编辑:程序博客网 时间:2024/05/29 15:55

在笔试遇到这样的一道题目 :

输入框输入两个数字 进行除法运算 因为UI没有进行判断 所以 要在代码中进行判断 

要求:指定在一行输入 不考虑浮点数和不能整除情况

合法输入举例:345 345

输出:1

非法输入举例:345

输出:ERROR


代码如下:

public static void main (String[] args){

Scanner sc = new Scanner(System.in);
int[] a = new int[20];
int i = 0;
        while (!sc.hasNextLine()) {//注意while处理多个case
            a[i++] = sc.nextInt();  
        }
        if(i==0||i>=2||a[1] == 0){
        System.out.println("ERROR");
        }else{
        System.out.println(a[0]/a[1]);
        }

         }

关于这里用到的hasNextLine()判断:当读取到换行符时 判断为true

如果while判断条件为hasNextInt() 读取到换行符时 并不会跳出while循环 

nextInt()也是不读取换行符的 nextLine读取到换行符就结束一行的读入

再看下面一个例子:

http://blog.csdn.net/chen820655096/article/details/8003619


public static void main (String[] args){

                int n=0;  
        String s1;  
        Scanner s=new Scanner(System.in);  
        n=s.nextInt();  
        s1=s.nextLine();//加这句与不加的差别很大 
        //System.out.println("n为:"+n);  
        int   s2[]=new   int[n] ;  
        for(int i=0;i<n;i++){  
            s1=s.nextLine();  
            s2[i]=getLineSum(s1);  
        }  
        for(int i=0;i<n;i++){  
            System.out.println(s2[i]);  
        }  
                  
    }  
    public static int getLineSum(String strLine){  
        Scanner s=new Scanner(strLine);  
        int sum=0;  
        while(s.hasNextInt())  
        {  
            sum+=s.nextInt();  
        }  
        return sum;  
    }  


不加s1=s.nextLine()

结果为

2

1 3

0

4

加上以后的结果为

2

1 3

2 4

4

6


nextInt()读入的是仅是数字,而换行符没有读入,

使用nextInt()的时候,读取一定是数值型的字符,然后就按换行符 接着使用nextLine(),它是读到行分隔符就结束,而行分隔符前已经没信息,所以没有读到任何可返回的信息。