如何优化此代码(返回语句)?

时间:2016-03-29 03:55:41

标签: java return

所以当我输入这个问题的时候,我找到了一个"缺少返回语句的解决方法"错误。但我仍然认为这不是正确的做法。如您所见,我有一些嵌套的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);         
}

5 个答案:

答案 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 ;;      }

相关问题