Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在字符串中洗牌字符的问题_Java_Nullpointerexception_Shuffle - Fatal编程技术网

Java 在字符串中洗牌字符的问题

Java 在字符串中洗牌字符的问题,java,nullpointerexception,shuffle,Java,Nullpointerexception,Shuffle,我想为一项作业洗牌某个字符串。当我尝试这样做时,它会抛出一个NullPointerException for (char d : masterCode.toCharArray()) { possibleLetters.add(d); } Collections.shuffle(possibleLetters); for (char c : possibleLetters) { // arraylist of characters sb.append(c); //stringbui

我想为一项作业洗牌某个字符串。当我尝试这样做时,它会抛出一个
NullPointerException

for (char d : masterCode.toCharArray()) {
    possibleLetters.add(d);
}
Collections.shuffle(possibleLetters);
for (char c : possibleLetters) { // arraylist of characters
    sb.append(c); //stringbuilder
    masterCode = sb.toString();
}
所以我尝试了另一种方法:

masterCode = masterCode.substring(0, 4);
for (char d : masterCode.toCharArray()) {
    possibleLetters.add(d);
}
Collections.shuffle(possibleLetters);
for (char c : possibleLetters) { // arraylist of characters
    //sb.append(c); //stringbuilder
    masterCode = masterCode.concat(Character.toString(c)); // string
}
但这也没有给出预期的结果<代码>主代码首先是ECAB,然后是CCBA,用于下一次输出

masterCode
是另一种方法中随机生成的字符的字符串,不允许重复


问题:解决这个问题的好方法是什么?

在示例一中,您确定使用
StringBuilder sb=new StringBuilder()初始化了
sb
?检查堆栈跟踪中的错误,它可能显示
sb
为空

在示例2中,行
masterCode=masterCode.concat(Character.toString(c))附加字符。您需要先设置
masterCode=”“
。根据,此方法:

将指定的字符串连接到此字符串的结尾


是否初始化
sb
?在第二个示例中,尝试使用
Char
而不是
Char
:将这些字符附加到现有字符串
主代码中。这个字符串的旧内容仍然存在。值得指出的是,这是Arrrow之前的问题之一。是的,我忘记了我删除了超类中的声明,因为我不再需要它了,然后在这里重新使用它。但它仍然在输出中提供不同的字符。第一次输出为:“CDBF”,之后如果您写了一个新问题,它将变成“DCEF”@Arrrow,然后请再添加一些代码。我猜您的错误在其他地方,因为您当前的代码不会“创建”完整的新字符,如示例中的
E
。@Arrrow您将需要一个新问题来解决该问题,您现在使用的代码就是这个答案的结果。你的问题写得很好,所以不要害怕问更多的问题(对不起,汤姆,你的评论最初是在我的后面,所以更有意义,但我用两个字母“r”拼写了Arrrow的名字,因此删除并推荐了)