【发布时间】:2014-03-22 03:16:58
【问题描述】:
这个程序应该比较“DNA”字符串。
输入:
3
ATGC
TACG
ATGC
CGTA
AGQ
TCF
第一行表示程序将运行多少次。每次运行时,它都会比较两个字符串。 A 与 T 匹配,反之亦然。 G 与 C 匹配,反之亦然。因此,如果字符串 1 的第一个字母是 A,则字符串 2 的第一个字母应该是 T。如果下一个是 T,则另一个字符串上的下一个字母应该是 A 等等。如果不是 A、T、 G,或C出现,它是一个坏样本。如果是坏的,打印出坏的,如果是好的,打印出好的。我对此尝试了许多不同的组合,它们都运行良好,但根据法官的测试数据(他们有不同的输入),它失败了。有人看到这有什么问题吗?我知道这可能不是完成工作的最有效方式,但至少在我的理解中确实如此。
输出:
好
不好
不好
public class DNA
{
public static void main(String[] args) throws IOException
{
Scanner scan = new Scanner (new File ("dna.dat"));
int T = scan.nextInt();
scan.nextLine();
boolean valid = true;
for (int i = 0; i < T; i++)
{
String strand1 = scan.nextLine();
strand1 = strand1.toUpperCase();
String strand2 = scan.nextLine();
strand2 = strand2.toUpperCase();
for (int p = 0; p < strand1.length(); p++)
{
if (strand1.charAt(p) != 'A' && strand1.charAt(p) != 'T' && strand1.charAt(p) != 'G' && strand1.charAt(p) != 'C'
&& strand2.charAt(p) != 'A' && strand2.charAt(p) != 'T' && strand2.charAt(p) != 'G' && strand2.charAt(p) != 'C')
{
valid = false;
break;
}
if (strand1.length() != strand2.length())
{
valid = false;
break;
}
}
if (valid)
{
for (int p = 0; p < strand1.length(); p++)
{
if ((strand1.charAt(p) == 'A' && strand2.charAt(p) == 'T') || (strand1.charAt(p) == 'T' && strand2.charAt(p) == 'A')
|| (strand1.charAt(p) == 'G' && strand2.charAt(p) == 'C') || (strand1.charAt(p) == 'C' && strand2.charAt(p) == 'G'))
valid = true;
else
valid = false;
}
}
if (valid)
out.println("GOOD");
else
out.println("BAD");
valid = true;
}
}
}
我添加了 toUpperCase 并比较了相同长度的字符串,就像最后一次尝试查看它们的数据是否可能有一些小写字母或不同长度的字符串,尽管它们应该都是相同的长度和大写。尽管如此,该程序仍然以“未通过评委测试数据”而被拒绝。
【问题讨论】:
标签: java regex for-loop boolean logic