日期:2014-05-20  浏览次数:20820 次

数组空指针的问题
请问这个错在哪里?????  

char[] letter={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
  int c = 0;
  String b=jTextField2.getText();
  char[] a1 = null;
 
  for(int i=0;i<=b.length();i++){
  c=b.charAt(i);
  a1[i]=letter[c];
  }



Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 49
  at javaapplication3.NewJFrame.jButton1ActionPerformed(NewJFrame.java:161)

------解决方案--------------------
char[] a1 = null;没有初始化分配长度,直接使用a1[i]肯定会报错..
修改为:char[] a1 = new char[26]; //长度根据你自己的需要设定

------解决方案--------------------
补充1下。

c=b.charAt(i);
a1[i]=letter[c];

这2行代码逻辑上就有错误。
比如说:
String b = "a";
那么你这样获取c的值会为:
c = 96;
那么letter[c]就会抛出数组越界异常了。
------解决方案--------------------
这里有几处错误。
①、char[] a1 = null;
a1未初始化,没有分配内存空间,所以a1[i]=letter[c];就报错了。
应该改为char[] a1 = new char[b.length()];
②、b.charAt(i);返回的应该是char类型,你将char直接转为int的后果是得到的是ascii码值。比如
char c = '1';
int i = c;
此时i = 49,而不是1。
③、for(int i=0;i<=b.length();i++){循环条件有问题。因该是i<b.length();数组下标从0开始。
Java code
        char[] letter = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
                'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
                'w', 'x', 'y', 'z' };
        String b=jTextField2.getText();
        int len = b.length();
        char[] a1 = new char[len];
        for (int i = 0; i < len; i++) {
            char c = b.charAt(i);
            int index = Integer.parseInt(Character.toString(c));
            a1[i] = letter[index];
        }