【发布时间】:2017-04-16 18:14:35
【问题描述】:
我正在尝试使用 4 个字母 - A、C、T、G 创建所有可能的两个字母单词的列表。所以输出应该像
两个字母的单词输出
AA
CA
TA
GA
AC
CC
TC
GC
AT
CT
TT
GT
AG
CG
TG
GG
我能够使用此 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]);
}
}
}
}
现在我想使用相同的 4 个字母 - A、C、T、G 创建一个所有可能的三个字母单词的列表。所以输出会像
三字母单词输出
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
所以要生成上面的输出,我只需要在我的 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 = "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]);
}
}
}
}
所以我的问题是,如果用户可以选择指定他/她是否想要所有 2 字母单词或 3 字母单词的列表 - 我如何结合这两个程序?两个程序仅在一个条件语句上有所不同。
用户可以指定他/她是否需要所有可能的 2 字母词或 3 字母词甚至 4 字母词的列表。我的程序必须动态添加或删除条件语句来生成列表。在 Java 中可以做到这一点吗?
提前谢谢你!
【问题讨论】:
-
您应该重新设计您的算法以获取一个参数,
n指定序列长度。还要注意Math.pow产生doubles,这可能导致高于2^53的舍入错误。 -
您的问题是您当前的代码正在使用两种“不同的方式”解决 same 问题。
标签: java if-statement conditional