zoukankan      html  css  js  c++  java
  • 键盘录入

    步骤:

    1.导包:在首行import java.util.Scanner;

    2.声明一个Scanner实例 Scanner sc=new Scanner(System.in)

    3.获取数据 

    整形:int num=sc.nextInt(); //换行,空格做结束

    字符串:String s=sc.nextLine(); //换行做结束

    使用nextLine()方法时,不将空格看做是两个字符串的间隔,而是看作字符串的一部分,返回时,它作为String类型一并返回

    使用next()方法时,将空格看作是两个字符串的间隔

    使用nextInt()方法时,与next()方法类似,只是它的返回值是int类型的,依旧将空格看作是两个输入的数据的间隔

    所以nextInt和nextLine不能连在一起写因为结束的标志回车是一样的,

    当用nextInt()读取缓冲区数据时,遇到回车或者空格,数据就会被读取走,但是回车符或者空格会被留下。当再调用nextLine()时,因为nextLine()是以回车符结束,当被调用后,刚好缓冲区还有被nextInt()“吃”剩下的回车符,所以还没等接着输入第二个参数,nextLine()就已经结束。因为只读取到一个回车符,所以pile的参数自然为空,从而导致后序程序出现异常。

    解决方案:

    把nextInt()换成nextLine(),再转换成int类型,就完美解决。

    String s1 = in.nextLine();
    int count = Integer.parseInt(s1);
    String pile = in.nextLine();
    String[] piles = pile.split(" ");

    在读取前,一定需要hasNext和hasNextLine判断是否还有输入的数据。它们的区别为:

    hasNext()方法判断输入(文件、字符串、键盘等输入流)是否还有下一个输入项,若有,返回true,反之false。

    1
    2
    3
    Scanner sc = new Scanner(new File("test.txt"));
     
    System.out.println(sc.hasNext());

    若test.txt为空(空格、tab、回车),则输出结果为false;若该文件不为空输出true。

    当输入为键盘时,该方法出现阻塞(block),也即等待键盘输入。输入源没有结束,又读不到更多输入项。

    1
    2
    3
    Scanner sc = new Scanner(System.in);
     
    System.out.println(sc.hasNext());

    运行上面的程序,控制台等待键盘输入,输入信息后输出结果为true。

    1
    2
    输入:Hello
    true

    由上面的知识,则如下代码则不难理解:

    1
    2
    3
    4
    Scanner sc = new Scanner(System.in);
    while(sc.hasNext()) {
        System.out.println("Input from keyboard:" + sc.next());
    }

    sc.hasNext()始终等待键盘输入,输入信息后,sc.next()打印出该信息。

      当读入最后一个数据的时候,并不是跳出,而是阻塞在了while中,一直执行

    原因:
      hasNext(),是如果此扫描器的输入中有另一个标记,则返回 true。在等待要扫描的输入时,此方法可能阻塞。扫描器将不执行任何输入。所以循环会一直下去。
      
    解决方案:
      此时,可以设置一个终止符,调用hasNext()的重载方法hasNext(String patten):如果下一个输入与从终止符相匹配,则返回 true。扫描器不执行任何输入。
    //例:以“0”作为终止符
    Scanner in = new Scanner(System.in);
    while (!in.hasNext("0")) {
    System.out.println(in.next());
    }
    1
    2
    3
    4
    5
    1
    2
    3
    4
    5

    2 每次读取一行数据

    import java.util.Scanner;

    public class Test2 {
    public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    //是否还有下一行
    while (sc.hasNextLine()) {
    String str = sc.nextLine();//读取一行,保留空格
    System.out.println("输出:"+str);
    }

    sc.close();
    }
    }
    运行结果: 

    123 456 789
    输出:123 456 789
    111   111   111
    输出:111   111   111

    3 每次读取一个数据

    import java.util.Scanner;

    public class Test2 {
    public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    //是否还有下一个元素
    while (sc.hasNext()) {
    String str = sc.next();//读取一个元素,不保留空格
    System.out.println("输出:"+str);
    }

    sc.close();
    }
    }
    运行结果:

    123 456 798
    输出:123
    输出:456
    输出:798
    111   111   111
    输出:111
    输出:111
    输出:111

    想退出循环可以参考https://mp.csdn.net/postedit/88424076 
    ---------------------
    作者:春卷同学
    来源:CSDN
    原文:https://blog.csdn.net/Rex_WUST/article/details/88572001
    版权声明:本文为博主原创文章,转载请附上博文链接!


    ---------------------
    作者:熊仙森
    来源:CSDN
    原文:https://blog.csdn.net/qunqunstyle99/article/details/82874288
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    移动web前端高效开发实践 读书笔记
    前端开发最佳实践-读书笔记
    frontend-Tips
    匿名函数的几种写法
    12个用得着的JQuery代码片段(转)
    tesseract-ocr 学习笔记(比网上的中文说明都详细)
    关于大数据的思考
    单片机实验的小记录~~PWM
    组建Redis集群遇到`GLIBC_2.14' not found和ps -ef 不显示用户名
    柔性数组(Redis源码学习)
  • 原文地址:https://www.cnblogs.com/xuwangqi/p/11027974.html
Copyright © 2011-2022 走看看