A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

这两天做阳哥的技术分练习题时有一点困惑,特发帖求各路大神指点迷津。

就是java中把键盘输入的内容赋值给某个变量,然后再用这个变量进行后续运算。因为java没有像C那样的scanf函数。
求助度娘以后发现有两种方式,

方式一:
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入:");
String str = bufferedReader.readLine();
System.out.println("输入的内容是:" + str);

方法二:
Scanner s = new Scanner(System.in);
int num = s.nextInt();
//键盘输入的值赋给了num

我是想输入一个数字然后进行运算,但是方式一不知道为什么编译没有通过,然后用的方式二程序就正常运行了。(都正常导过包)

想问问大家BufferedReader和Scanner这两种方式有什么不同?
以及方式一中有没有什么问题?

6 个回复

倒序浏览
对数据流操作,可能出现异常,所以要处理异常。下面是修改后的代码。
  1. import java.io.*;
  2. class Test
  3. {
  4. public static void main(String[] args)
  5. {

  6. //对流操作有可能楚翔异常,所以要try一下才可以。
  7. BufferedReader bufferedReader=null;
  8. try
  9. {
  10. bufferedReader=new BufferedReader(new InputStreamReader(System.in));
  11. System.out.println("请输入。。。");
  12. String str=bufferedReader.readLine();
  13. System.out.println("输入的内容是:"+str);
  14. }
  15. catch (Exception e)
  16. {
  17. e.printStackTrace();
  18. }
  19. finally
  20. {
  21. //必须关闭资源,而关闭资源时也有可能出现异常,所以try一下
  22. try
  23. {
  24. bufferedReader.close();
  25. }
  26. catch (Exception e)
  27. {
  28. e.printStackTrace();
  29. }

  30. }

  31. }
  32. }
复制代码





回复 使用道具 举报
方式一必须抛异常,一般是IO异常。
回复 使用道具 举报
方法一使用的时候自己要处理好异常就好,方法二使用简单点
回复 使用道具 举报
sugar 发表于 2014-7-7 08:32
对数据流操作,可能出现异常,所以要处理异常。下面是修改后的代码。

那为什么方式二就不会出现异常呢?是不是基础视频会讲到?
回复 使用道具 举报
八零、玖羚 发表于 2014-7-7 08:55
方法一使用的时候自己要处理好异常就好,方法二使用简单点

那是不是都能够获取键盘输入的内容?
回复 使用道具 举报
个人理解:
查阅JAVA api可知:方法一:
InputStreamReader:
  1. public InputStreamReader(InputStream in,
  2.                          String charsetName)
  3.                   throws UnsupportedEncodingException
复制代码
BufferedReader:
  1. public String readLine()
  2. throws IOException
复制代码

也就是说,在方式一中会抛出IOException,它是checkedException。因此,你要么try..catch将其捕获,要么声明异常将其抛出。

方法二:


Scanner:
  1. public Scanner(InputStream source)
复制代码
  1. public int nextInt()

  2. 抛出:
  3. InputMismatchException - 如果下一个标记与 Integer 正则表达式不匹配,或者超出范围
  4. NoSuchElementException - 如果输入信息已耗尽
  5. IllegalStateException - 如果此扫描器已关闭
复制代码

你选择的构造方法没有抛异常。至于nextInt方法,虽然抛出了异常,但查阅可知它们都是RuntimeException的子类,这类异常是运行时异常(uncheckedException),编译时不会检查。因此,方法二编译时不会报错。

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马