黑马程序员技术交流社区
标题: 一个关于输出的问题,奇了怪了 [打印本页]
作者: zhiyi 时间: 2015-1-4 20:50
标题: 一个关于输出的问题,奇了怪了
本帖最后由 zhiyi 于 2015-1-14 08:53 编辑
做了一个练习题,在主函数中调用toHanzi(),为什么只调用一次没事儿,调用两次,或更多就不行了呢?还有传数字没事(也是一次性),一传其他字符就挂,
- public class Test {
-
- public static void main(String[] args)
- {
- String testStr= toHanzi();
- //打印提示语句,可以使程序更友好易用
- if(testStr.equalsIgnoreCase("INPUTERR") )
- {
- testStr= toHanzi();
- System.out.println("输入有误,请重试\n");
- }
-
- System.out.print("转换结果为\n"+testStr);
- }
- }
复制代码 //创建一个函数,实现此功能,返回转换好的字符串 - static String toHanzi()
- {
- //定义输入流
- BufferedReader putIn=new BufferedReader(new InputStreamReader(System.in));
- //定义一个临时Sting变量,用于收.readLine()函数返回的字符串
- String temString=null;
- try
- {
- //从键盘读取字符串
- temString=putIn.readLine();
- }
- catch(IOException e)
- {
- throw new RuntimeException("从键盘读取数据失败");
- }
- finally
- {
- //当读取数据失败时,必须关闭输入流
- try
- {
- putIn.close();
- }
- catch(IOException e)
- {
- throw new RuntimeException("输入流关闭失败");
- }
- }
- //接受到的将字符串转为字符元素,并存入字符数组arr[]
- char [] arr=temString.toCharArray();
- char[] table={'零','一','二','三','四','五','六','七','八','九'};
- StringBuilder result=new StringBuilder();
- //对获得的字符数组进行转换
- for(int i=0,t=0;i<arr.length;i++)
- {
- t=arr[i];
- //对字符的合法性进行判断,所输入字符必须是0~9的数字
- if(t<'0'||t>'9')
- return "INPUTERR";
- result.append(table[t-'0']);
- }
-
- return result.toString();
- }
- }
复制代码
显示这个
此函数的功能是将您从键盘输入的数字转换为中文格式。
请输入数字
gghjjj
Exception in thread "main" java.lang.RuntimeException: 从键盘读取数据失败
at com.itheima.Test4.toHanzi(Test4.java:52)
at com.itheima.Test4.main(Test4.java:31)
作者: bjuth 时间: 2015-1-4 22:34
建议粘全部代码
作者: zhiyi 时间: 2015-1-5 08:25
本帖最后由 zhiyi 于 2015-1-5 08:33 编辑
两段代码在同一.Java文件中的
作者: zhiyi 时间: 2015-1-5 08:27
soorry ,昨天更新代码失败,下面重试了下
作者: kerner 时间: 2015-1-5 11:30
不能调用函数两次,因为你第一输入完毕已经关闭了流,第二次输入时,输入流已经被关闭,所以读不到了,会报错误。输入输出流的关闭是为了减轻操作系统底层资源。
输入输出流的关闭是在你整个程序确实没有数据可读可写的时候,再关闭,那不然为什么类库中的基本读写函数没有关闭输入输出流。
作者: 王景阳 时间: 2015-1-5 11:39
应该是关闭数据流结构问题 你看关闭后 在读取时是不是没有开启
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |