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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhiyi 中级黑马   /  2015-1-4 20:50  /  1548 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 zhiyi 于 2015-1-14 08:53 编辑

做了一个练习题,在主函数中调用toHanzi(),为什么只调用一次没事儿,调用两次,或更多就不行了呢?还有传数字没事(也是一次性),一传其他字符就挂,
  1. public class Test {

  2.         
  3.         public static void main(String[] args)
  4. {
  5.                 String testStr= toHanzi();
  6.                 //打印提示语句,可以使程序更友好易用
  7.                 if(testStr.equalsIgnoreCase("INPUTERR")        )
  8.                         {
  9.                         testStr= toHanzi();        
  10.                         System.out.println("输入有误,请重试\n");
  11.                         }
  12.                
  13.                 System.out.print("转换结果为\n"+testStr);
  14.                 }
  15.         }            
复制代码
//创建一个函数,实现此功能,返回转换好的字符串   
  1. static String  toHanzi()
  2.         {
  3.                 //定义输入流
  4.                 BufferedReader putIn=new BufferedReader(new InputStreamReader(System.in));
  5.                 //定义一个临时Sting变量,用于收.readLine()函数返回的字符串
  6.                 String temString=null;               
  7.                 try
  8.                 {
  9.                         //从键盘读取字符串
  10.                         temString=putIn.readLine();                        
  11.                 }
  12.                 catch(IOException e)
  13.                 {
  14.                         throw new RuntimeException("从键盘读取数据失败");
  15.                 }
  16.                 finally
  17.                 {
  18.                         //当读取数据失败时,必须关闭输入流
  19.                         try
  20.                         {
  21.                                 putIn.close();                                
  22.                         }
  23.                         catch(IOException e)
  24.                         {
  25.                                 throw new RuntimeException("输入流关闭失败");
  26.                         }
  27.                 }
  28.                 //接受到的将字符串转为字符元素,并存入字符数组arr[]
  29.                 char [] arr=temString.toCharArray();            
  30.                 char[] table={'零','一','二','三','四','五','六','七','八','九'};         
  31.                 StringBuilder result=new StringBuilder();
  32.                 //对获得的字符数组进行转换
  33.                 for(int i=0,t=0;i<arr.length;i++)
  34.                 {
  35.                         t=arr[i];
  36.                         //对字符的合法性进行判断,所输入字符必须是0~9的数字
  37.                         if(t<'0'||t>'9')
  38.                                 return "INPUTERR";                  
  39.                         result.append(table[t-'0']);
  40.                 }
  41.                
  42.                 return result.toString();
  43.         }

  44. }
复制代码





显示这个
此函数的功能是将您从键盘输入的数字转换为中文格式。
请输入数字
gghjjj
Exception in thread "main" java.lang.RuntimeException: 从键盘读取数据失败
        at com.itheima.Test4.toHanzi(Test4.java:52)
        at com.itheima.Test4.main(Test4.java:31)

5 个回复

倒序浏览
建议粘全部代码
回复 使用道具 举报
本帖最后由 zhiyi 于 2015-1-5 08:33 编辑

两段代码在同一.Java文件中的
回复 使用道具 举报
bjuth 发表于 2015-1-4 22:34
建议粘全部代码

soorry ,昨天更新代码失败,下面重试了下
回复 使用道具 举报
不能调用函数两次,因为你第一输入完毕已经关闭了流,第二次输入时,输入流已经被关闭,所以读不到了,会报错误。输入输出流的关闭是为了减轻操作系统底层资源。

输入输出流的关闭是在你整个程序确实没有数据可读可写的时候,再关闭,那不然为什么类库中的基本读写函数没有关闭输入输出流。
回复 使用道具 举报
应该是关闭数据流结构问题  你看关闭后 在读取时是不是没有开启
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马