我的任务是用" X替换字符串中的随机数。"我被允许这样做的唯一方法是使用Math.random。该方法也可以没有参数。这是在一个单独的预组装驱动程序中使用的类。这是我写的代码:
{{1}}
我完全迷失了。有人可以帮忙吗?
答案 0 :(得分:0)
根据您的代码,您的String b
似乎总是= -{LENGTH_OF_STRING}
。因此,不会替换任何字符串。
我假设你使用的是Java,请参考它可以帮助你的类似问题:Need to Select a random letter in a string and change it
答案 1 :(得分:0)
我猜你应该在字符串中生成一个随机位置,并用"X"
替换该位置的任何内容。 (我也猜测这是Java。)你的代码并没有接近你想做的事情。首先,a
将为负数,因为Math.random()
是介于0和1.0之间的随机double
值,(0 - dNACode.length())
评估为负数。其次,replace(CharSequence,CharSequence)
基于子串匹配进行替换,而不是任何基于位置的替换。因此,如果dNACode
类似于"AUUGAC"
,则您的代码会尝试将"-3"
的所有实例替换为"X"
。
请改为尝试:
static Random sRand = new Random();
public ComputerMicrobe mutate()
{
int a = sRand.nextInt(dNACode.length());
dNACode = dNACode.substring(0, a) + "X" + dNACode.substring(a+1);
return this;
} // End mutate
这会将a
设置为要替换的字符的索引,然后在该位置之前和之后严格地从子字符串组装dNACode
的新值,并在其间添加"X"
我在这里使用java.util.Random
而不是Math.random()
的实例来生成随机位置。 (Random
对象创建一次,并由对mutate()
的所有调用共享。)Random
具有非常有用的nextInt(int)
方法,可生成0(含)之间的随机整数它的论点(独家)。
我不知道您对其余代码有多少控制权,但我强烈建议将dNACode
声明为StringBuider
而不是String
。然后,您可以省去所有子字符串操作,并将赋值替换为dNACode
:
dNACode.replace(a, 'X');
或者您可以使用char[]
并执行:
dNACode[a] = 'X';
特别是如果您正在对mutate()
进行大量调用,这将大大减少生成的垃圾量。无论何时需要实际dNACode.toString()
而非new String(dNACode)
(或String
),您都可以随时致电CharSequence
(或char[]
)。 (请注意,您通常可以直接打印StringBuilder
或char[]
,而无需自己构建String
。)