【问题标题】:NullPointerException adding substring from string to array listNullPointerException 将子字符串从字符串添加到数组列表
【发布时间】:2013-12-28 10:59:11
【问题描述】:

我想要做的是将String 的子字符串添加到ArrayList。基本上将字符串中的每个字母添加到ArrayList 的索引中。之后我有一个打印语句,只是为了查看这些字母是否被添加到ArrayList(这是makearraylisOfChosenWord 下的第二个for 循环)。但是,当我在有或没有 print 语句的情况下运行它时,它给了我一个NullPointerException。是因为我在第一个 for 循环中以错误的方式将字母添加到数组列表中吗? 谢谢您的帮助 代码如下:

String[] wordList = {"apple", "orange", "strawberry", "banana"};
String chosenWord;

//Make an array list to hold one letter of the chosen word at each index
void makeArrayListOfChosenWord(){
    ArrayList<String> lettersOfChosenWord = new ArrayList<String> ();
    for (int i = 0; i < chosenWord.length(); i++) {
        lettersOfChosenWord.add(chosenWord.substring(i, i+1));
    }
    for (int i = 0; i < lettersOfChosenWord.size(); i++) {
        System.out.println((lettersOfChosenWord.get(i)).toString());
    }

}

//Let the game pick a random word from the word list
void setRandomWord(){
    int wordListLength = wordList.length;
    int pickRandomWord = (int) (Math.random() * wordListLength);
    String createRandomWord = wordList[pickRandomWord];
    chosenWord = createRandomWord;
    System.out.printf("the word is %s letters long", chosenWord.length());
}

【问题讨论】:

  • 这两种方法是完全独立的——它们有什么关系?如果您能提供一个简短但完整的程序来演示该问题,那将非常有帮助。
  • 实际上 setrandomword 从单词列表中选择一个随机单词,如果你看的话,实例变量 selectedword 被赋予选择的随机单词,(它在 setrandomword 方法,第 4 行)和 makearraylist 方法使用 selectedword 变量
  • 啊,和你一起。第二个方法肯定在第一个方法之前调用吗?这是一个简短但完整的程序会清楚地说明的事情。如果您显示堆栈跟踪信息也会有所帮助,以便我们知道异常发生的位置。
  • 没有问题,需要调用setRandomWord,然后makeArrayListOfChosenWord,应该不会抛出异常
  • 好的,正在处理中,感谢您的提示

标签: java arrays string exception arraylist


【解决方案1】:

我只是在考虑您的问题,并会尝试使用 ArrayListCharacter 而不是 String。这没关系,因为您提到您将String 拆分为单个Characters,所以ArrayList&lt;Character&gt;() 似乎是一种合理的方法。

为了拆分String,我会使用toCharArray()的方法:

String str = "abcd...";
ArrayList<Character> chars = new ArrayList<Character>();
for (char c : str.toCharArray()) {
  chars.add(c);
}

【讨论】:

  • 听起来很有趣,我以前从未见过这种方法,谢谢你提到它,我会尝试实现它(当然,在我理解它之后,哈哈)
  • 但是,toCharArray() 是否将其变成常规数组或数组列表?因为我希望能够在程序启动时从数组列表中删除某些字母
  • toCharArray 返回一个数组。 for 循环将每个数组元素添加到您的 ArrayList。使用这种方式可以避免子字符串方法和可能的 ArrayOutOfBoundExceptions
  • 好的,我明白了,我会尝试这样做,
【解决方案2】:

如果在调用 makeArrayListOfChosenWord 方法之前调用 setRandomWord 方法,则不会抛出 NullPointerException。对于这种情况,您的代码中不需要进行 if-check。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    相关资源
    最近更新 更多