将随机数替换为" X"

时间:2015-12-04 02:30:58

标签: random

我的任务是用" X替换字符串中的随机数。"我被允许这样做的唯一方法是使用Math.random。该方法也可以没有参数。这是在一个单独的预组装驱动程序中使用的类。这是我写的代码:

{{1}}

我完全迷失了。有人可以帮忙吗?

2 个答案:

答案 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[])。 (请注意,您通常可以直接打印StringBuilderchar[],而无需自己构建String。)