当前位置: 代码迷 >> J2SE >> 数组空指针的有关问题
  详细解决方案

数组空指针的有关问题

热度:10393   发布时间:2013-02-25 00:00:00.0
数组空指针的问题
请问这个错在哪里?????  

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];        }
  相关解决方案