如何生成所有可能的字符串,其中16个字符仅限于“a”和“b”?

时间:2015-02-19 07:53:21

标签: java string random char

我需要生成16个字符的所有可能字符串。字符只能是“a”或“b”。我怎么做?据我所知,有2 ^ 16种可能性。

以下是我正在尝试使用的代码:

public class Query5 {
    public static void main(String[] args){
        //Query5
        String s="";
        String [] hardCoded = {"16","13","3","14","11","9","4","6","15","12","2","10","8","5","1","7"};
        for (int i=0; i<2; i++)
        {
            if (i==0)
                s=s.concat("a");
            else if (i==1)
                s=s.concat("b");

            for (int c=0; c<2; c++)
            {
                if (c==0)
                    s=s.concat("a");
                else if (c==1)
                    s=s.concat("b");

                for (int d=0; d<2; d++)
                {
                    if (d==0)
                        s=s.concat("a");
                    else if (d==1)
                        s=s.concat("b");

                    for (int e=0; e<2; e++)
                    {
                        if (e==0)
                            s=s.concat("a");
                        else if (e==1)
                            s=s.concat("b");

                        for (int f=0; f<2; f++)
                        {
                            if (f==0)
                                s=s.concat("a");
                            else if (f==1)
                                s=s.concat("b");

                            for (int g=0; g<2; g++)
                            {
                                if (g==0)
                                    s=s.concat("a");
                                else if (g==1)
                                    s=s.concat("b");

                                for (int h=0; h<2; h++)
                                {
                                    if (h==0)
                                        s=s.concat("a");
                                    else if (h==1)
                                        s=s.concat("b");

                                    for (int j=0; j<2; j++)
                                    {
                                        if (j==0)
                                            s=s.concat("a");
                                        else if (j==1)
                                            s=s.concat("b");

                                        for (int k=0; k<2; k++)
                                        {
                                            if (k==0)
                                                s=s.concat("a");
                                            else if (k==1)
                                                s=s.concat("b");

                                            for (int l=0; l<2; l++)
                                            {
                                                if (l==0)
                                                    s=s.concat("a");
                                                else if (l==1)
                                                    s=s.concat("b");

                                                for (int m=0; m<2; m++)
                                                {
                                                    if (m==0)
                                                        s=s.concat("a");
                                                    else if (m==1)
                                                        s=s.concat("b");

                                                    for (int z=0; z<2; z++)
                                                    {
                                                        if (z==0)
                                                            s=s.concat("a");
                                                        else if (z==1)
                                                            s=s.concat("b");

                                                        for (int o=0; o<2; o++)
                                                        {
                                                            if (o==0)
                                                                s=s.concat("a");
                                                            else if (o==1)
                                                                s=s.concat("b");

                                                            for (int p=0; p<2; p++)
                                                            {
                                                                if (p==0)
                                                                    s=s.concat("a");
                                                                else if (p==1)
                                                                    s=s.concat("b");

                                                                for (int q=0; q<2; q++)
                                                                {
                                                                    if (q==0)
                                                                        s=s.concat("a");
                                                                    else if (q==1)
                                                                        s=s.concat("b");

                                                                    for (int r=0; r<2; r++)
                                                                    {
                                                                        if (r==0)
                                                                            s=s.concat("a, ");
                                                                        else if (r==1)
                                                                            s=s.concat("b, ");
                                                                        System.out.println(s);
                                                                        System.out.println(" ");

                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }

        }
    }
}

2 个答案:

答案 0 :(得分:1)

这是一个比N嵌套循环更简单的方法。

以一串正确长度的字符串开头。从字符串的一端开始,比如说左边,然后遍历它。

当您找到'b'时,请将其更改为'a'。

当您找到'a'时,将其更改为'b',打印字符串并返回字符串的开头。

当你到达字符串的末尾(没有找到'a')时,退出。

答案 1 :(得分:0)

我不知道您正在使用哪种编程语言,因此这里有一个脚本示例,您可以将其转换为所需的语言。 Objective-c有一个字符串方法,用于将字符串中的字符替换为另一个字符串,您的语言可能需要一个自定义方法,只需一个简单的循环。


编辑:您使用的是Java,您可以使用:http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#replaceAll%28java.lang.String,%20java.lang.String%29

用b的

替换0的abd 1

还使用Java中的Integer.toBinaryString(i)将int转换为二进制字符串


本着@Damien_The_Unbeliever的评论精神。

array strings = [];
int i = 0;

while (i < 2^16) {

string s Integer.toBinaryString(i)

s = [s replaceOccourancesOf "0" with "a"];
s = [s replaceOccourancesOf "1" with "b"];

while (s.length < 16) {

s = s + "a";

}

strings = [strings, s];

i++;

}

^注意,这不是可执行的Java代码..它只是虚拟脚本。

我没有使用Java编程...我编写了Obj-c程序并制作了这个脚本并且编译得很好并执行了所有可能的值:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.


    NSMutableArray *strings = [[NSMutableArray alloc] init];
    int i = 0;

    while (i < (int)pow(2,16)) {

        NSString *s = binaryStringFromInteger(i);

        s = [s stringByReplacingOccurrencesOfString:@"0" withString:@"a"];
        s = [s stringByReplacingOccurrencesOfString:@"1" withString:@"b"];

        while (s.length < 16) {

            s = [NSString stringWithFormat:@"%@a", s];

        }

        [strings addObject:s];

        i++;

    }

    NSLog(@"%@", strings);


}



    NSString * binaryStringFromInteger( int number ) {
    NSMutableString * string = [[NSMutableString alloc] init];

    int spacing = pow( 2, 2 );
    int width = ( sizeof( number ) ) * spacing;
    int binaryDigit = 0;
    int integer = number;

    while( binaryDigit < width )
    {
        binaryDigit++;

        [string insertString:( (integer & 1) ? @"1" : @"0" )atIndex:0];

        if( binaryDigit % spacing == 0 && binaryDigit != width )
        {
            [string insertString:@"" atIndex:0];
        }

        integer = integer >> 1;
    }

    return string;
}

从此处借用Obj-c二进制转换代码:https://stackoverflow.com/a/4393275/2057171