0

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

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

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

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

4

3 回答 3

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,然后您尝试为 a[i] 分配一个值(当前在内存中没有位置),这将为您提供一个 NullPointer。

于 2013-11-07T21:36:54.737 回答
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 - 您已明确将其设置为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
  • 每次迭代都创建一个新字符串是没有意义的。最后做
于 2013-11-07T21:37:16.870 回答
0

You define int[] a = null and never initialize it.

When you try to access it in a[i] = text.charAt(i); you get the NullPointerException.

You can solve you issue adding a initialization:

int[] a = new int[text.length];
于 2013-11-07T21:39:17.627 回答