我作为一个全新的初学者练习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);
}
正如我之前所指出的,没有别的陈述,但我觉得应该有。对此有解释吗?
答案 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);
}
}
在这种情况下,您编写的代码更具可读性