如何在java中动态检查条件?

如何在java中动态检查条件?,java,if-statement,conditional,Java,If Statement,Conditional,我试图用4个字母创建一个所有可能的两个字母单词的列表-a,C,T,G。所以输出应该是 两个字母的单词输出 AA CA TA GA AC CC TC GC AT CT TT GT AG CG TG GG AAA CAA TAA GAA ACA CCA TCA GCA ATA CTA TTA GTA AGA CGA TGA GGA AAC CAC TAC GAC ACC CCC TCC GCC ATC CTC TTC GTC AGC CGC TGC GGC AAT CAT TAT GAT ACT

我试图用4个字母创建一个所有可能的两个字母单词的列表-a,C,T,G。所以输出应该是

两个字母的单词输出

AA
CA
TA
GA
AC
CC
TC
GC
AT
CT
TT
GT
AG
CG
TG
GG
AAA
CAA
TAA
GAA
ACA
CCA
TCA
GCA
ATA
CTA
TTA
GTA
AGA
CGA
TGA
GGA
AAC
CAC
TAC
GAC
ACC
CCC
TCC
GCC
ATC
CTC
TTC
GTC
AGC
CGC
TGC
GGC
AAT
CAT
TAT
GAT
ACT
CCT
TCT
GCT
ATT
CTT
TTT
GTT
AGT
CGT
TGT
GGT
AAG
CAG
TAG
GAG
ACG
CCG
TCG
GCG
ATG
CTG
TTG
GTG
AGG
CGG
TGG
GGG
我能够使用此Java代码生成上述输出

双字母单词Java代码

import java.io.IOException;

class Variations {

    private static char replace (char bc) {
        switch (bc) {
            case 'A':
                bc = 'C';
                break;

            case 'C':
                bc = 'T';
                break;

            case 'T':
                bc = 'G';
                break;

            case 'G':
                bc = 'A';
                break;
        }

        return bc;
    }

    public static void main(final String[] args) throws IOException {

        String code = "AA";
        char[] bc = new char[code.length()];

        for (int i=0; i<code.length(); i++) {
            bc[i] = code.charAt(i);
        }


        for (int i=0; i < Math.pow(4, bc.length); i++) {

            System.out.println(bc);

            bc[0] = replace(bc[0]);

            if (i%4 == 0) {
                bc[1] = replace(bc[1]);
            }


        }

    }
}
import java.io.IOException;

class Variations {

    private static char replace (char bc) {
        switch (bc) {
            case 'A':
                bc = 'C';
                break;

            case 'C':
                bc = 'T';
                break;

            case 'T':
                bc = 'G';
                break;

            case 'G':
                bc = 'A';
                break;
        }

        return bc;
    }

    public static void main(final String[] args) throws IOException {

        String code = "AAA";
        char[] bc = new char[code.length()];

        for (int i=0; i<code.length(); i++) {
            bc[i] = code.charAt(i);
        }


        for (int i=0; i < Math.pow(4, bc.length); i++) {

            System.out.println(bc);

            bc[0] = replace(bc[0]);

            if (i%4 == 0) {
                bc[1] = replace(bc[1]);
            }

            if (i%16 == 0) {
                bc[2] = replace(bc[2]);
            }


        }

    }
}
因此,为了生成上述输出,我只需在main方法中再添加一条
if
语句

三字母单词Java代码

import java.io.IOException;

class Variations {

    private static char replace (char bc) {
        switch (bc) {
            case 'A':
                bc = 'C';
                break;

            case 'C':
                bc = 'T';
                break;

            case 'T':
                bc = 'G';
                break;

            case 'G':
                bc = 'A';
                break;
        }

        return bc;
    }

    public static void main(final String[] args) throws IOException {

        String code = "AA";
        char[] bc = new char[code.length()];

        for (int i=0; i<code.length(); i++) {
            bc[i] = code.charAt(i);
        }


        for (int i=0; i < Math.pow(4, bc.length); i++) {

            System.out.println(bc);

            bc[0] = replace(bc[0]);

            if (i%4 == 0) {
                bc[1] = replace(bc[1]);
            }


        }

    }
}
import java.io.IOException;

class Variations {

    private static char replace (char bc) {
        switch (bc) {
            case 'A':
                bc = 'C';
                break;

            case 'C':
                bc = 'T';
                break;

            case 'T':
                bc = 'G';
                break;

            case 'G':
                bc = 'A';
                break;
        }

        return bc;
    }

    public static void main(final String[] args) throws IOException {

        String code = "AAA";
        char[] bc = new char[code.length()];

        for (int i=0; i<code.length(); i++) {
            bc[i] = code.charAt(i);
        }


        for (int i=0; i < Math.pow(4, bc.length); i++) {

            System.out.println(bc);

            bc[0] = replace(bc[0]);

            if (i%4 == 0) {
                bc[1] = replace(bc[1]);
            }

            if (i%16 == 0) {
                bc[2] = replace(bc[2]);
            }


        }

    }
}
import java.io.IOException;
阶级差异{
专用静态字符替换(字符bc){
交换机(bc){
案例“A”:
bc='C';
打破
案例“C”:
bc='T';
打破
案例“T”:
bc='G';
打破
案例“G”:
bc=‘A’;
打破
}
返回bc;
}
公共静态void main(最终字符串[]args)引发IOException{
字符串代码=“AAA”;
char[]bc=新字符[code.length()];

对于(inti=0;i你基本上是在实现一个笛卡尔产品。在谷歌的番石榴中有一个非常好的方法叫做
set#cartesianProduct

使用此功能,您可以轻松生成所有可能的组合:

Set<List<String>> set = Sets.cartesianProduct(Collections.nCopies(3, ImmutableSet.of("A", "C", "T", "G")));

当然,您可以调整最后一部分,这只是为了模拟您在问题中显示的输出。

是的。这样做的一个好方法是使用某种代码询问用户想要的长度:2或3。您可以使用扫描仪在控制台中执行此操作。添加

import java.util.Scanner;
然后,在main方法的顶部添加

Scanner scannerName = new Scanner(System.in);
然后您可以询问用户并保存他们的响应

System.out.print("Enter the length you would like, AA or AAA: ");
String code = scannerName.next();
然后,您可以将要添加的if语句更改为:

if (i%16 == 0 && code.length() == 3) {your code...}
这样,它将仅在用户输入AAA或另一个长度为3的令牌时运行

此外,如果您想将其扩展到最多可使用四个,可以按如下方式折叠代码:

for (int count = 2; count <= code.length(); count++){
   if (i % (Math.pow(2, count)) == 0){
      bc[count] = replace(bc[count]);
   }
}

for(int count=2;count)你应该重新设计你的算法以获取一个参数,
n
指定序列长度。还要注意的是
Math.pow
会产生
double
s,这会导致
2^53
以上的舍入错误。你的问题是你当前的代码用两个“不同的方式”。太棒了!…谢谢你。!!很有魅力。解决了我的头痛:)我原以为这篇文章会超出文章的篇幅。但我想你是对的。我也学到了一些东西(nCopies),因此我很高兴你发了这篇文章。