gpt4 book ai didi

java - 我不明白为什么我的 if 语句有效

转载 作者:行者123 更新时间:2023-12-01 09:59:02 25 4
gpt4 key购买 nike

所以如果序列 1 :CAG 和序列 2 :AG,我应该得到响应

"Best alignment score :2 CAG AG"

但是我得到了

"Best alignment score :0 CAG AG"

我相信我的问题出在第二个 if 语句中,就像调试器中的情况一样。

当使用调试器时,它显示计算机没有进入 if 语句。

public static int allignment (String dnaSequence1 , String dnaSequence2 /*,int offset*/){
int newScore = 0;
int bestScore = 0;
int newOffset = 0;
int bestOffset = 0;

for(int offset =0; offset<=(dnaSequence1.length()-dnaSequence2.length());offset++){
//newOffset ++;
newScore = 0;
for(int place =0; place<dnaSequence2.length();place++ ){
if(dnaSequence1.charAt(place) == dnaSequence2.charAt(place/*+offset*/)){

newScore ++;
if(newScore>bestScore){
bestScore = newScore;
bestOffset = newOffset;

}
}else{ continue;}
}
newOffset ++;
}

String space = " ";
System.out.println("Best alignment score :"+bestScore);
System.out.println(dnaSequence1);
System.out.print( space(bestOffset) + dnaSequence2);

int alignmentScore = dnaSequence1.compareToIgnoreCase(dnaSequence2);

return alignmentScore;
}

public static String space (int bestOffset){
String space = " ";
String offsetScaces = "";

for(int i = 0; i<bestOffset; i++){
offsetScaces+=space;
return offsetScaces;
}
return offsetScaces;
}

最佳答案

您的版本对两个字符串使用相同的索引。因此,它检查 sequence1 中索引 0 处的核苷酸('C')是否与 sequence2 中索引 0 处的核苷酸('A')匹配,然后递增索引并检查如果 sequence1 中索引 1 处的核苷酸('A')与 sequence2 中索引 1 处的核苷酸('G')匹配,则它将停止而不会找到匹配项。

012
CAG
AG

从上面的示例中可以看出,第一个字符串中的字符永远不会与第二个字符串中的字符相同(0:C/A、1:A/G、2:G/null)

我突然想到,也许您正在寻找与 dnaSequence1 中的某些内容对齐的 dnaSequence2 中最长的片段,而不仅仅是从索引 0 开始的最长片段。

此版本尝试在第一个序列中找到整个第二个序列,如果找不到,它将从第二个序列的末尾修剪 1 个核苷酸,然后重试。一旦将第二个序列修剪为空,它就会再次从整个第二个序列开始,从头开始修剪 1 个核苷酸,然后重复该过程(如果找到匹配则停止)

public static int allignment(String dnaSequence1, String dnaSequence2 /*,int offset*/) {
int bestScore = -1;
int bestOffset = 0;
String bestSequence = null;

for(String tempSequence = dnaSequence2; tempSequence.length() > 0; tempSequence = tempSequence.substring(1)) {
for(String match = tempSequence; match.length() > 0; match = match.substring(0, match.length() - 1)) {
int matchIndex;
if (-1 != (matchIndex = dnaSequence1.indexOf(match))) {
if (match.length() > bestScore) {
bestOffset = matchIndex;
bestScore = match.length() ;
bestSequence = match;
break;
}
}
}
if (null != bestSequence && bestScore > tempSequence.length()) {
break; // don't bother checking any shorter sequences, we already have a better match
}
}

if (null != bestSequence) {
System.out.println("Best alignment score :" + bestScore);
System.out.println(dnaSequence1);
System.out.print(space(bestOffset) + bestSequence);
} else {
System.out.print(dnaSequence1+" and "+dnaSequence2+" cannot be aligned");
}

int alignmentScore = dnaSequence1.compareToIgnoreCase(dnaSequence2);

return alignmentScore;
}

public static String space(int bestOffset) {
StringBuilder builder = new StringBuilder();

for (int i = 0; i < bestOffset; i++) {
builder.append(" ");
}
return builder.toString();
}

关于java - 我不明白为什么我的 if 语句有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36950276/

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