Java项目中int数组的NullPointerException

时间:2013-11-07 21:34:32

标签: java arrays nullpointerexception

我正在创建一个方法,它将int n作为参数,将先前初始化的String转换为整数数组,每次向每个索引添加1次,通过强制转换从int数组的每个增量创建一个新的char数组,然后将所有n个char数组转换为新的字符串并将它们打印到屏幕上。

Netbeans在我当前的项目中抛出NullPointerException,我不知道为什么。有人可以解释为什么会出现这个错误以及我应该做些什么来修复它?

相关课程:https://www.dropbox.com/s/gv02i1traulg8kp/StringShifter.java
包含主要方法的类:https://www.dropbox.com/s/ymon96ovv4c2lnf/CodeBreaker.java

错误:
在Project5.StringShifter.shift(StringShifter.java:35)中的线程“main”java.lang.NullPointerException中的异常
在Project5.CodeBreaker.main(CodeBreaker。的java:18)

3 个答案:

答案 0 :(得分:6)

你的问题在这里:

    int[] a = null; 
    char[] b = null; 
    int r = 0; 

    for (int i = 0; i <= text.length(); i++) { 
        a[i] = text.charAt(i); 
    }

a设置为指向null,然后尝试为[i](当前在内存中没有位置)赋值,这将为您提供NullPointer。

答案 1 :(得分:3)

看看你的代码:

int[] a = null; 
char[] b = null; 
int r = 0; 

for (int i = 0; i <= text.length(); i++) { 
    a[i] = text.charAt(i); 
}

a为空 - 您已明确将其设置为null。所以

a[i] = text.charAt(i);

将以NullReferenceException失败 - 它必然会被绑定。您需要初始化a以引用数组,例如

int[] a = new int[text.length()];

还需要更改上限 - 因为当itext.length()时,text.charAt(i)会引发异常。所以你想要:

int[] a = new int[text.length()];
for (int i = 0; i < text.length(); i++) { 
    a[i] = text.charAt(i); 
}

目前尚不清楚为什么你想要一个int[]。使用起来会更简单:

char[] chars = text.toCharArray();
for (int i = 0; i < text.length(); i++) {
    chars[i] = (char) (chars[i] + 1);
}

此外:

  • 多次越过循环是没有意义的 - 只需添加n而不是1
  • 在每次迭代中创建一个新字符串都没有意义;最后才做到这一点

答案 2 :(得分:0)

您定义int[] a = null并且永远不会初始化它。

当您尝试在a[i] = text.charAt(i);中访问它时,您会获得NullPointerException

您可以解决添加a初始化的问题:

int[] a = new int[text.length];