分享

弄清楚next(),nextLine(),nextInt()

 马自达的图书馆 2018-05-03

今天笔试又遇到输入问题,有时候这是个大问题,搞清楚!!!很重要,查了资料网上说的不全,不清楚,特总结。欢迎交流。

1.先总结,说说到底是啥!

  1. next(),nextInt(),nextDouble()....  

这些可以认为是一类,首先这些都是“阻塞式的”,意思就是如果遇到空格,Tab,Enter,会继续等待,直到获得相应类型相应的值!!!!!

而且!!焦点不会移动到下一行,仍然处在这一行上。

  1. next()---String,nextInt()----int,nextDouble()----double....  

2.例子:

  1. package com.demo;  
  2.   
  3. import java.util.Scanner;  
  4.   
  5. public class NEXT {  
  6.         
  7.     public static void main(String[] args) {  
  8.         Scanner in =  new Scanner(System.in);  
  9.         System.out.println("请输入一个整数");  
  10.       while(in.hasNextLine()){  
  11.            String tString = in.next();  
  12.            int num = in.nextInt();  
  13.          //  System.out.println("请输入一个字符串");  
  14.         //   String str = in.nextLine();  
  15.            System.out.println("num:"+num);  
  16.            String str = in.next();  
  17.            System.out.println("num="+num+",str="+str);  
  18.           String s3 = in.nextLine();  
  19.           System.out.println("s3:"+s3);  
  20.        }  
  21.    }  
  22. }  

先自己测试下吧,印象深刻!!!!

下面以一个例子仔细解释下:

例2:

先总结注意点;

如果一开始输入了空格,Tab,Enter,那么会继续等待!!!!直到获取值。

另外一类是nextLine():当使用nextLine()方法时会读取改行从前到的所有的内容,包括换行符,然后把焦点移动到下一行的开头。也就是可以把空格,回车读出值为空!!1

  1. package com.demo;  
  2.   
  3. import java.util.Scanner;  
  4.   
  5. public class NEXT {  
  6.         
  7.     public static void main(String[] args) {  
  8.         Scanner in =  new Scanner(System.in);  
  9.          
  10.       while(in.hasNextLine()){  
  11.            String tString = in.next();  
  12.            System.out.println(tString);  
  13.            int num = in.nextInt();  
  14.    
  15.            String str = in.nextLine();  
  16.            System.out.println("num:"+num);  
  17.       
  18.            System.out.println("num="+num+",str="+str);  
  19.           String s3 = in.nextLine();  
  20.           System.out.println("s3:"+s3);  
  21.        }  
  22.    }  
  23. }  



分析:

当输入1  2(2前有空格)后

  1. String tString = in.next();  

把1读入---存储到tString

  1. int num = in.nextInt();  
当读到上面时候,有一个空格,阻塞--继续往后读,读到了2,好的光标停止在当前行尾

  1. String str = in.nextLine();  
下面执行上面关键的一行,光标现在在结尾,前面的值已经被读走,现在
  1. in.nextLine();  
读取包括回车在内的以及其前面存在的值!!!!----为空----光标位置移到下一行首,等待取值!!

所以输出str=空

如果此时再按回车,那么继续往下执行!!

  1. String s3 = in.nextLine();  
读取包括回车在内的当前行,仍然为空。

我想你已经明白了!!!

2.总结:

对于数组循环建议使用nextInt()等类型

对于读取一行值然后继续处理--使用nextLine()
实用技巧:读数组--赋值

先给输入输出样例:

输入:

4 4
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4

输出
1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 

  1. import java.util.Scanner;  
  2.   
  3. public class TestArray {  
  4.     public static void main(String[] args) {  
  5.         Scanner scanner = new Scanner(System.in);  
  6.         while (scanner.hasNext()) {  
  7.             int row = scanner.nextInt();  
  8.             int col = scanner.nextInt();  
  9.             int[][] matrix = new int[row][col];  
  10.             for (int i = 0; i < row * col; i++) {  
  11.                 matrix[i / col][i % col] = scanner.nextInt();  
  12.             }  
  13.               
  14.               for (int i = 0; i < row; i++) {  
  15.                     for (int j = 0; j < col; j++) {  
  16.                         System.out.print(matrix[i][j]+" ");  
  17.                     }  
  18.              }  
  19.         }  
  20.       
  21.         scanner.close();  
  22.     }  
  23. }  

nextLine()样例:求解最后一个单词的长度

输入:abd dc fd f good

输出:4

  1. import java.util.Scanner;  
  2. public class Main {  
  3.      
  4.     public static void main(String[] args) {  
  5.         Scanner input = new Scanner(System.in);  
  6.         String s="";  
  7.         while(input.hasNextLine()){  
  8.             s=input.nextLine();  
  9.             System.out.println(s.length()-1-s.lastIndexOf(" "));  
  10.         }      
  11.     }  
  12. }  



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多