if语句没有else(当它看起来需要一个时)

时间:2015-11-19 20:38:35

标签: java if-statement

我作为一个全新的初学者练习Java问题。我遇到了一个问题,它使用条件if语句来满足一个条件。如果不满足该条件,则继续执行而不执行,而是执行不在if语句中的其他内容。但是没有别的说法。我觉得我很难解释这个问题,所以我只需要复制/粘贴问题和满意的代码。

问题:

给定一个字符串,返回一个新的字符串,其中第一个和最后一个字符已被交换。

实施例

frontBack("代码")→" eodc"

frontBack(" a")→" a"

frontBack(" ab")→" ba"

SATIFFACTORY CODE:

public String frontBack(String str) {

   if(str.length() <= 1) return str;

   String mid = str.substring(1, str.length() - 1);

   return str.charAt(str.length() - 1) + mid + str.charAt(0);  

}

正如我之前所指出的,没有别的陈述,但我觉得应该有。对此有解释吗?

4 个答案:

答案 0 :(得分:2)

从方法returning开始,其余代码将不会被执行:

if(str.length() <= 1) return str;

如果str.length()<= 1,则该方法将立即返回,并且该方法中不会执行其他代码行...

答案 1 :(得分:2)

这被称为早退。本质上,你的程序不需要继续执行超过保护条件 - 如果字符串的长度小于或等于1.凭借Collections.sort,你带回你提供的字符串满足其条款,不再执行方法

对于大多数人来说,这是一种代码风格的决定;对于其他人来说,这是一个可读性问题。有些人可能认为早期return的形式读得更好,并希望保留它。如果您使用return编写代码,它看起来像这样:

else

这是一种可读性的练习;如果您认为上述表格更清晰,则使用它;否则,提前退货是可以接受的。

答案 2 :(得分:0)

如果字符串长度为1或更小,它将立即返回。它不会处理后续的陈述。这样做的好处是它可以防止代码缩进太多

<script>

(function() {

    var path1;
    var path2;
    var startPoints;
    var endPoints;
    var currentStep = 0;
    var maximumSteps = 100;
    var timeBeforeFirstStep = 1000;
    var timeBetweenSteps = 20;

    function animatePath() {
        if (currentStep < maximumSteps) {
            currentStep = currentStep + 1;
            for (var i = 0; i < path1.pathSegList.numberOfItems; i++) {
                var item = path1.pathSegList.getItem(i);
                if (item.pathSegType === SVGPathSeg.PATHSEG_MOVETO_REL || item.pathSegType === SVGPathSeg.PATHSEG_LINETO_REL) {
                    if (startPoints[i] && endPoints[i]) {
                        item.x = startPoints[i].x + (endPoints[i].x - startPoints[i].x) * (currentStep / maximumSteps);
                        item.y = startPoints[i].y + (endPoints[i].y - startPoints[i].y) * (currentStep / maximumSteps);
                    }
                }
            }
            setTimeout(animatePath, timeBetweenSteps);
        }
    }

    function window_load() {
        path1 = document.getElementById("rect1");
        path2 = document.getElementById("rect2");
        startPoints = [];
        for (var i = 0; i < path1.pathSegList.numberOfItems; i++) {
            var item = path1.pathSegList.getItem(i);
            if (item.pathSegType === SVGPathSeg.PATHSEG_MOVETO_REL || item.pathSegType === SVGPathSeg.PATHSEG_LINETO_REL) {
                startPoints.push({"x": item.x, "y": item.y});
            }
            else {
                startPoints.push(null);
            }
        }
        endPoints = [];
        for (var i = 0; i < path2.pathSegList.numberOfItems; i++) {
            var item = path2.pathSegList.getItem(i);
            if (item.pathSegType === SVGPathSeg.PATHSEG_MOVETO_REL || item.pathSegType === SVGPathSeg.PATHSEG_LINETO_REL) {
                endPoints.push({"x": item.x, "y": item.y});
            }
            else {
                endPoints.push(null);
            }
        }
        setTimeout(animatePath, timeBeforeFirstStep);
    }

    window.addEventListener("load", window_load);

}());

</script>

答案 3 :(得分:0)

如果可以的话,它完全等同于:

public String frontBack(String str)  {

   if(str.length() <= 1) 
   {
       return str;
   }
   else
   {
      String mid = str.substring(1, str.length() - 1);

      return str.charAt(str.length() - 1) + mid + str.charAt(0);  
   }
}

在这种情况下,您编写的代码更具可读性