Java NullPointerException将子字符串从字符串添加到数组列表

Java NullPointerException将子字符串从字符串添加到数组列表,java,arrays,string,exception,arraylist,Java,Arrays,String,Exception,Arraylist,我试图做的是将字符串中的子字符串添加到数组列表。基本上是将字符串中的每个字母添加到ArrayList中的索引中。之后,我有一个print语句,只是想看看字母是否被添加到ArrayList(这是makearraylisOfChosenWord下的第二个for循环)。但是,当我在有或没有print语句的情况下运行它时,它会给我一个NullPointerException。是因为我在第一个for循环中以错误的方式将字母添加到arraylist吗? 谢谢你的帮助 代码如下: String[] wordL

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

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());
}
String[]wordList={“苹果”、“橘子”、“草莓”、“香蕉”};
字符串选择词;
//制作一个数组列表,在每个索引中保存所选单词的一个字母
void makeArrayListOfChosenWord(){
ArrayList lettersOfChosenWord=新的ArrayList();
for(int i=0;i
我正在考虑你的问题,我会尝试使用
字符的
数组列表,而不是
字符串。这是可以的,因为您提到要将
字符串
拆分为单个
字符
s,因此
ArrayList()
似乎是一种合理的方法

对于拆分
字符串
,我将使用以下方法:

String str=“abcd…”;
ArrayList chars=新的ArrayList();
for(字符c:str.toCharArray()){
添加(c)项;
}

如果在调用
makeArrayListOfChosenWord
方法之前调用
setRandomWord
方法,则不会引发NullPointerException。如果您的代码中需要针对这种情况进行检查,则为否。

这两种方法是完全独立的-它们之间有何关联?如果你能提供一个简短但完整的程序来演示这个问题,这将非常有帮助。实际上,setrandomword从单词列表中选择一个随机单词,如果你看,实例变量chosenword被赋予随机单词picked(在setrandomword方法中,第4行),makearraylist方法使用chosenword variableAh,与你。第二个方法肯定是在第一个方法之前调用的吗?这是一个简短但完整的程序可以清楚说明的事情。如果您能显示堆栈跟踪,这样我们就能知道异常发生的位置,这也会有所帮助。没有问题,您需要调用setRandomWord,然后生成ArrayListofChosenWord,并且不应该抛出异常OK,正在处理它,感谢您提供的信息听起来很有趣,我以前从未见过该方法,感谢您的提及,我将尝试实现它(当然,在我理解它之后,lol),但是,toCharArray()是将它变成一个正则数组还是数组列表?因为我希望在程序initiatestoCharArray返回数组时能够从arraylist中删除某些字母。for循环将每个数组元素添加到ArrayList中。使用这种方法可以避免子字符串方法和BoundExceptions的可能排列我明白了,我将尝试这样做,
String str = "abcd...";
ArrayList<Character> chars = new ArrayList<Character>();
for (char c : str.toCharArray()) {
  chars.add(c);
}