gpt4 book ai didi

java - 比较字符串的逻辑不正确?

转载 作者:行者123 更新时间:2023-12-01 13:14:36 26 4
gpt4 key购买 nike

这个程序应该比较“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 并比较了相等长度的字符串,就像最后一次尝试查看它们的数据是否可能有一些小写字母或不同长度的字符串,尽管它们应该都是相同的长度和大写字母。尽管如此,该方案仍因“未通过评委测试数据”而被拒绝。

最佳答案

valid = false 时,您需要在第二个 for 循环中中断。例如,如果字符 1、2、3 错误,但 #4 匹配,您仍然会得到有效的结果。

我会将字符串转换为数组以使事情变得更容易:

for (int i = 0; i < T; i++)
{
boolean valid = true;
String strand1 = scan.nextLine();
strand1 = strand1.toUpperCase();
String strand2 = scan.nextLine();
strand2 = strand2.toUpperCase();
if ( strand1.length() != strand2.length())
{
valid = false;
}
if (valid) {
char[] c1 = strand1.toCharArray();
char[] c2 = strand2.toCharArray();

for (int p = 0; p < c1.length; p++)
{
if (-1 == "ACTG".indexOf(c1[p]) || -1 == "ACTG".indexOf(c2[p]))
{
valid = false;
break;
}
}

if (valid)
{
for (int p = 0; p < c1.length; p++)
{
if (('A' == c1[p] && 'T' != c2[p]) ||
('T' == c1[p] && 'A' != c2[p]) ||
('C' == c1[p] && 'G' != c2[p]) ||
('G' == c1[p] && 'C' != c2[p])) {
valid = false;
break;
}
}
}
}
if (valid)
System.out.println("GOOD");
else
System.out.println("BAD");
}

关于java - 比较字符串的逻辑不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22573008/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com