首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.charAt()返回nullpointerexception

.charAt()返回nullpointerexception
EN

Stack Overflow用户
提问于 2014-03-18 00:03:56
回答 3查看 2K关注 0票数 0

我写了一个小程序,里面有一个带有字符串名的二维数组。在嵌套的for循环中,我检查数组的每个元素中的第一个字符。如果第一个字符是'A‘|| 'E’|| 'I‘|| 'O’|| 'U',我使用FileWriter将该元素写入文件。然而,每次我尝试编译这个程序时,我都会得到NullPointerException。代码如下:

FileWriter fw =新的FileWriter("imena.txt");

代码语言:javascript
复制
String polje[][] = new String[5][5];
polje[0][0] = "Janez";
polje[0][1] = "Tine";
polje[0][2] = "Miha";
polje[0][3] = "Klemen";
polje[0][4] = "Jure";

polje[1][0] = "Tone";
polje[1][1] = "Andrej";
polje[1][2] = "Janko";
polje[1][3] = "Nejc";
polje[1][4] = "Erik";

for(int i = 0; i < polje.length; i++) {
    for(int j = 0; j < polje[0].length; j++) {
        if(polje[i][j].charAt(0) == 'A') {
            fw.write(polje[i][j] + '\n');
        }
    }
}

如果我将If改为if(polje[1][1].charAt(0) == 'A'),它会运行得很好,但我希望迭代数组中的所有元素。任何帮助都将不胜感激。

结果,我忘记了初始化数组中的所有元素。我不敢相信我自己都看不到问题所在。:)

感谢大家的帮助!;)

EN

回答 3

Stack Overflow用户

发布于 2014-03-18 00:06:25

目前为止,您只初始化了polje[1][...]。因此,当i为2( j为任意值)时,polje[i][j]将为null...当你通过调用charAt(0)来取消对它的引用时,你会得到一个异常。

请注意,使用List而不是数组可以避免此类错误,因为数组的大小是动态增长的。您甚至可以将这两者混合在一起:

代码语言:javascript
复制
List<String[]> polje = new ArrayList<>();
polje.add(new String[] { "Janez", "Tine", ... };
polje.add(new String[] { "Tone", "Andrej", ... };

for (String[] array : polje) {
    for (String item : array) {
        // This way you'll handle empty strings, too
        if (item.startsWith("A")) {
            fw.write(item + '\n');
        }
    }
}
票数 3
EN

Stack Overflow用户

发布于 2014-03-18 00:06:24

在您的示例中使用new String[2][5];。使用[5][5],您将使用空值初始化一个5*5矩阵。

另一种解决方案可能是简单地添加一个非空条件:

polje[i][j] != null && polje[i][j].charAt(0) == 'A'

票数 2
EN

Stack Overflow用户

发布于 2014-03-18 00:14:34

你只需要初始化polje和polje1,当你点击polje3时NPE就会发生

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22459322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档