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的名字,因此删除并推荐了)