我正在创建一个方法,它将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)
答案 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()];
还需要更改上限 - 因为当i
为text.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];