所以当我输入这个问题的时候,我找到了一个"缺少返回语句的解决方法"错误。但我仍然认为这不是正确的做法。如您所见,我有一些嵌套的if语句。我希望在返回任何内容之前满足这两个条件,但我必须将return语句放在嵌套的if语句之外。如果最后一个条件没有遇到怀疑,这会引起很多问题,因为会返回一个空字符串,但我觉得这不是做事的最佳方法。
第一次编辑:在我当前的更新中,我仍然缺少一个返回语句。我可以做同样的修复我应用但我觉得好像它是不合适的。
public String findProtein(String dna) {
int start = dna.indexOf("atg");
int stop1 = dna.indexOf("tag", start + 3);
int stop2 = dna.indexOf("tga", start + 3);
int stop3 = dna.indexOf("taa", start + 3);
String subStr1 = dna.substring(start, stop1);
String subStr2 = dna.substring(start, stop2);
String subStr3 = dna.substring(start, stop3);
boolean geneFound = false;
if (subStr1.length() % 3 == 0) {
geneFound = true;
return subStr1;
}
if (geneFound == false) {
if (subStr2.length() % 3 == 0) {
geneFound = true;
}
return subStr2;
}
if (geneFound == false) {
if (subStr3.length() % 3 == 0) {
geneFound = true;
}
return subStr3;
}
if (geneFound == false) {
return "";
}
}
第二次编辑:附加代码
private void stopCodon(String gene){
//This prints out the last 3 characters of the gene
String stopCodon = gene.substring(gene.length() - 3);
System.out.println(stopCodon);
}
public void testing() {
String a = "ataaactatgttttaaatgt";
String result = findProtein(a);
stopCodon(result);
}
答案 0 :(得分:1)
如果是我,我会编辑以下逻辑
if( subStr1.length() % 3 ==0 ){
geneFound = true;
return subStr1;
}
if(geneFound == false){
if(subStr2.length( )% 3 ==0 ){
geneFound = true;
}return subStr2;
}
if(geneFound == false){
if(subStr3.length( )% 3 ==0 ){
geneFound = true;
}
return subStr3;
}
if (geneFound == false){
return "";
}
使用else if
语句到以下内容:
if( subStr1.length() % 3 ==0 ){
return subStr1;
} else if (substr2.length()%3==0){
return substr2;
} else if (substr3.length()%3 == 0) {
return substr3;
} else {
return null;
}
我也不确定String subStr1 = dna.substring(start,stop1);
是否是您想要的东西,因为如果终止密码子不存在则会抛出异常,但如果没有给我们额外的话,很难判断信息。
<强>加强>
有点看到这一点,但如果你看一下indexOf的描述
https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#indexOf(int)
此对象表示的字符序列中第一次出现的字符的索引,如果未出现该字符,则为-1。
如果要检查子字符串是否存在,请检查索引是否为-1
我只会通过第一个子串的示例
int stop1 = dna.indexOf("tag", start + 3);
if(stop != -1) {
return dna.substring(start, stop1);
}
您应该首先检查起始密码子是否存在,如果它不立即存在则返回null,因为终止密码子的位置在没有起始密码子的情况下是无用的。
希望这会有所帮助
答案 1 :(得分:0)
if( subStr1.length() % 3 ==0 ){
geneFound = true;
result = subStr1;
}else if(geneFound == false){
if(subStr2.length( )% 3 ==0 ){
geneFound = true;
}
result = subStr2;
}else if(geneFound == false)
if(subStr3.length( )% 3 ==0 ){
geneFound = true;
}
result = subStr3;
}
if (geneFound == false){
result = "";
}
return result;
结果是String类型。
但是,三个if语句中的任何一个都将返回该值。如果不是第四个if语句将返回值。
您可以将结果分配给变量并在结尾处返回
答案 2 :(得分:0)
由于您返回一个值并且boolean是一个局部变量,因此如果您在此代码中更改了布尔值,那么它并不重要。我当时真的没有看到它的使用。我按照你的逻辑简化了代码!
public String findProtein(String dna) {
int start = dna.indexOf("atg");
int stop1 = dna.indexOf("tag", start+3);
int stop2 = dna.indexOf("tga",start+3);
int stop3 = dna.indexOf("taa",start+3);
String subStr1 = dna.substring(start,stop1);
String subStr2 = dna.substring(start,stop2);
String subStr3 = dna.substring(start,stop3);
if(subStr1.length() % 3 == 0 ) {
return subStr1;
}
if(subStr2.length() % 3 == 0 ){
return subStr2;
}
if(subStr3.length( )% 3 ==0 ){
return subStr3;
}
return "";
}
答案 3 :(得分:0)
为什么不回复此类内容?
public String findProtein(String dna) {
String valueToBeReturned = "";
if(condition 1){
valueToBeReturned = "value1"
}
if(condition 2){
valueToBeReturned = "value2"
}
//Rest of the conditions
return valueToBeReturned; //Finally return the specific value
}
答案 4 :(得分:0)
删除不必要的代码块怎么样?
<击> if (geneFound == false) {
击>
返回&#34;&#34 ;;
}