为什么我转换后的字符串继续追加
Why does my converted string continue to append
我目前正在尝试创建一个随机生成的字符串。问题是,按照我设置它的方式,它会继续添加到自身。
我的代码(我从另一个 class 调用了很多静态变量,所以不用担心那部分)
class Generate1 extends Thread{
@Override
public void run() {
while(RUNNING == true){
generate();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private void generate(){
for(int i=0;i<length;i++){
int decider = rando.nextInt(6)+1;
if(decider == 1){
sb1.append("A");
}
if(decider == 2){
sb1.append("B");
}
if(decider == 3){
sb1.append("C");
}
if(decider == 4){
sb1.append("D");
}
if(decider == 5){
sb1.append("E");
}
if(decider == 6){
sb1.append("F");
}
}
Log.d("PSS",sb1.toString()); // this here is the stringbuilder being outputted
}
}
如果我将长度设置为 2,在我的日志中它看起来像:
DF
DFCA
DFCAEF
而不是我想要的输出:
DF
CA
EF
我该如何解决这个问题? (我知道这可能是一个愚蠢的问题,但已经晚了,通过代码思考伤害了我的眼睛和大脑)
编辑 - shmosel 指出了问题所在。对我来说,这是一个非常简单的修复,忽略了一些东西
您对 generate()
的每次调用都使用相同的 StringBuilder
实例。用一个新的代替:
private void generate(){
StringBuilder sb1 = new StringBuilder(length);
// ...
}
我目前正在尝试创建一个随机生成的字符串。问题是,按照我设置它的方式,它会继续添加到自身。
我的代码(我从另一个 class 调用了很多静态变量,所以不用担心那部分)
class Generate1 extends Thread{
@Override
public void run() {
while(RUNNING == true){
generate();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private void generate(){
for(int i=0;i<length;i++){
int decider = rando.nextInt(6)+1;
if(decider == 1){
sb1.append("A");
}
if(decider == 2){
sb1.append("B");
}
if(decider == 3){
sb1.append("C");
}
if(decider == 4){
sb1.append("D");
}
if(decider == 5){
sb1.append("E");
}
if(decider == 6){
sb1.append("F");
}
}
Log.d("PSS",sb1.toString()); // this here is the stringbuilder being outputted
}
}
如果我将长度设置为 2,在我的日志中它看起来像:
DF DFCA DFCAEF
而不是我想要的输出:
DF CA EF
我该如何解决这个问题? (我知道这可能是一个愚蠢的问题,但已经晚了,通过代码思考伤害了我的眼睛和大脑)
编辑 - shmosel 指出了问题所在。对我来说,这是一个非常简单的修复,忽略了一些东西
您对 generate()
的每次调用都使用相同的 StringBuilder
实例。用一个新的代替:
private void generate(){
StringBuilder sb1 = new StringBuilder(length);
// ...
}