我正在尝试使用字符串缓冲区混合字符串。程序应该随机选择StringBuffer1(sb1)中单词中的一个字符。将其附加到空StringBuffer2(sb2),并持续执行此操作,直到StringBuffer1(sb1)的sb1.length()
等于0(空)。
这是我的代码:
String word = "Hello";
String empty = "";
StringBuffer sb1 = new StringBuffer(word);
StringBuffer sb2 = new StringBuffer(empty);
Random randomChar = new Random();
while (word.length() != 0) {
int charIndex = randomChar.nextInt(word.length());
char character = sb1.charAt(charIndex);
sb2.append(character);
sb1.deleteCharAt(charIndex);
}
System.out.println(word.length());
System.out.println(word);
System.out.println(sb2);
答案 0 :(得分:0)
您正在StringBuffer sb1
进行更改,而您正在根据String word
的长度验证循环。如此。
Random
号码基于word.length()
生成,始终为5。 使用sb1.length()
代替word.length()
,以便sb1
的长度用于循环以及随机数。
答案 1 :(得分:-1)
试试这个。由于Random,这可能会比预期循环更多次。
说明:问题与索引有关。当您从字长中选择随机时,您将获得0 - >的元素。 length-1但同时你要从字符串缓冲区中删除元素,所以下次当你得到index = length-1时,它不会出现在字符串缓冲区中,这就是你得到错误的原因。当字符串缓冲区长度变为零时,我也添加了终止条件。
String word = "Hello";
String empty = "";
StringBuffer sb1 = new StringBuffer(word);
StringBuffer sb2 = new StringBuffer(empty);
Random randomChar = new Random();
while (word.length() != 0 && sb1.length() != 0) {
int charIndex = randomChar.nextInt(word.length());
if (sb1.length() > charIndex) {
char character = sb1.charAt(charIndex);
sb2.append(character);
sb1.deleteCharAt(charIndex);
}
}
System.out.println(word.length());
System.out.println(word);
System.out.println(sb2);