黑马程序员技术交流社区

标题: 为什么不行,求解!!!!!!! [打印本页]

作者: 来自沙沙的我    时间: 2014-6-1 17:47
标题: 为什么不行,求解!!!!!!!
本帖最后由 来自沙沙的我 于 2014-6-1 22:13 编辑
  1. import java.io.*;
  2. public class Test3 {
  3.         public static void main(String[] args) throws IOException
  4.         {
  5.                 BufferedReader dq=null;//引用变量  
  6.         BufferedWriter sx=null;//引用变量  
  7.         try   
  8.         {  
  9.             //创建输入流  
  10.             dq=new BufferedReader(new InputStreamReader(System.in));  
  11.             //创建输出流  
  12.             sx=new BufferedWriter(new OutputStreamWriter(System.out));
  13.             char[] zw={'零','一','二','三','四','五','六','七','八','九'};
  14.                
  15.                
  16.                         
  17.                         
  18.                         
  19.                         int i=0;
  20.                     char[] sz=new char[200];
  21.                         i=dq.read(sz);
  22.                         int j=sz[0];
  23.                         sx.write(j);//这个地方能够编写出J的数字
  24.                         //sx.write(zw[j]); 那么为什么这个地方会报错?
  25.                         
  26.                         
  27.                         
  28.                         
  29.                 }
  30.                 catch(IOException e)
  31.                 {
  32.                         
  33.                 }
  34.         dq.close();
  35.         sx.close();
  36.                
  37.         }
  38. }
复制代码

作者: Lin0411    时间: 2014-6-1 19:10
int j=sz[0]这句中得到的是阿拉伯数字对应的ascii码,这样0对应的就是48,依次类推。因此在执行sx.write(zw[j])会发生角标越界的异常,正确的做法是:int j=sz[0]-'0';这样取得的j角标就和阿拉伯数字对应起来了。
作者: 来自沙沙的我    时间: 2014-6-1 22:13
Lin0411 发表于 2014-6-1 19:10
int j=sz[0]这句中得到的是阿拉伯数字对应的ascii码,这样0对应的就是48,依次类推。因此在执行sx.write(zw ...

谢谢回复。
再问下,这个知识点在毕老师视频哪个章节里才会说到啊?
作者: fenzheng    时间: 2014-6-1 22:34
char[i]   不应该等于一个int 的值,你弄错了,eclipse没有提示你package filetest;

import java.io.*;

public class Test3 {
        public static void main(String[] args) throws IOException {
                BufferedReader dq = null;// 读字符流
                BufferedWriter sx = null;// 写字符流
                try {
                        // 创建输入流
                        dq = new BufferedReader(new InputStreamReader(System.in));
                        // 创建输出流
                        sx = new BufferedWriter(new OutputStreamWriter(System.out));
                        //创建一个char类型的数组
                        char[] zw = { '零', '一', '二', '三', '四', '五', '六', '七', '八', '九' };
                       
                       
                        int i = 0;
                        char[] sz = new char[200];//一个200的缓冲区
                        i = dq.read(sz);//读到缓冲区 ,返回世纪读到的字符数,这里读到的是一个
                        char c = sz[0];
//                        sx.write(c);// 这个地方能够编写出J的数字
                         sx.write(c);// 那么为什么这个地方会报错?

                } catch (IOException e) {

                }
                dq.close();
                sx.close();

        }
}

作者: fenzheng    时间: 2014-6-1 22:36
你改成这样就好了,没有问题了,你得到的是阿斯卡码,阿斯卡码的话,嗯,你传给你的40多呢,而你世纪只读到了一个,写也只写一个,所以就会发生没有40多个的情况,就角标越界,其实这里你没有必要搞阿斯卡码的,你改成我这样就好了
作者: fenzheng    时间: 2014-6-1 22:38
这个是毕老师讲基础,编码的时候,具体我也记得不清楚了
作者: superob123    时间: 2014-6-1 23:21
错误有点多。
首先,int j=sz[0];这里目的应该是要得到char[] zw的角标,但你传的是字符,不是数字,那么它就会强转成字符对应编码表的数字。
还有就算得到正确的角标,还是注意下编码表的问题,因为是要输出汉字,java默认的编码表示gbk,如果是utf-8的话,有些汉字是3个字符表示的,有时候会得到乱码




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2