return 在Java中作用
根据《java编程思想:第四版》4.5节中介绍:return语句作为一个无条件的分支,无需判断条件即可发生。return语句主要有两个用途:一方面用来表示一个方法返回的值(假定没有void返回值),另一方面是指它导致该方法退出,并返回那个值。根据方法的定义,每一个方法都有返回类型,该类型可以是基本类型,也可以是对象类型,同时每个方法都必须有个结束标志,因此,return起到了这个作用。在返回类型为void的方法里面,有个隐含的return语句,因此,在void方法里面可以省略不写。
return语句和其他控制结束语句的区别
Java中结束语句主要有四类:return,break,continue以及goto。但是goto不常用,所有此文不对此讨论。
(1)return语句:是指结束该方法,继续执行方法后的语句。(作用范围最大)
(2)break语句:是指在循环中直接退出循环语句(for,while,do-while,foreach),break之后的循环体里面的语句也执行。
(3)continue语句:是指在循环中中断该次循环语句(for,while,do-while,foreach),本次循环体中的continue之后语句不执行,直接跳到下次循环。
其他可以参考引用:java 内return语句总结
注:一个方法内部有多个return语句,当一个执行后就结束该方法,其他return语句并不会执行。
private boolean isSubTree(TreeNode root1, TreeNode root2) {
if(root2==null) return true;//#1
if(root1==null && root2!=null) return false;//#2
if(root1.val==root2.val){
return isSubTree(root1.left, root2.left) && isSubTree(root1.right, root2.right);//#3
}
return false;//#4
}
例如:#3 return isSubTree(root1.left, root2.left) && isSubTree(root1.right, root2.right)执行后,则结束isSubTree方法
1.只有返回值为bool类型才允许返回true或false...
2.在哪里返回、返回什么值都是由代码逻辑决定...
(19年2月27日更新)对于return 的理解不够深刻,其实return 最主要的用处就是【结束该方法,继续执行方法后的语句】
例1,代码头已经给出,希望改成 static public ArrayList<Integer> PrintFromTopToBottom(TreeNode node)这种方法
把没有返回值的方法变成一个有返回值的方法,但是返回语句只是用来退出该方法,返回值并不需要打印出来。
static public void printFromTopToBottom(TreeNode pTreeRoot) {
if (pTreeRoot == null) {
return;
}
int depth = depth(pTreeRoot);
for (int i = 1; i <= depth; ++i) {
levelOrder(pTreeRoot, i);
}
}
改变后,代码如下:
static public ArrayList<Integer> PrintFromTopToBottom(TreeNode node) {
ArrayList<Integer> list=new ArrayList<>();
if (node == null) {
return list;
}
int depth = depth(node);
for (int i = 1; i <= depth; ++i) {
levelOrder(node, i);
}return list;
}
可以发现,list=[],list为空。return list的目的是为了退出该方法。
影响(打印)输出的是如下代码块,调用了方法 levelOrder(node, i),方法levelOrder(node, i)具体做了什么事情与return list无关,return list只是保证了退出该方法。
if (node == null) {
return list;
}
int depth = depth(node);
for (int i = 1; i <= depth; ++i) {
levelOrder(node, i);}
测试代码块:
import java.util.ArrayList;
public class printArrayList {
//层序遍历二叉树递归实现
/**
* 计算节点高度,例如depth(8)=3;depth(6)=2;
* depth(5)=1
* @param pTreeRoot
* @return
*/
static private int depth(TreeNode pTreeRoot){
if(pTreeRoot==null){
return 0;
}
int l = depth(pTreeRoot.left);
int r = depth(pTreeRoot.right);
if(l > r){
return l + 1;
}else{
return r + 1;
}
}
static private void levelOrder(TreeNode pTreeNode, int level) {
if(pTreeNode == null || level < 1){
return ;
}
if(level == 1){
System.out.print(pTreeNode.val+ " ");
return ;
}
/**
* 分析,当level>=2时候才执行,才会有level-1=1的情况出现
*/
//左子树
levelOrder(pTreeNode.left, level-1);
//右子树
levelOrder(pTreeNode.right, level-1);
}
/**
* depth=3
* i=1,2,3 的时候,实现分别打印这一层
* 根节点 pTreeRoot
*/
static public ArrayList<Integer> PrintFromTopToBottom(TreeNode node) {
ArrayList<Integer> list=new ArrayList<>();
//printFromTopToBottom(node);
if (node == null) {
return list;
}
int depth = depth(node);
for (int i = 1; i <= depth; ++i) {
levelOrder(node, i);
}return list;
}
public static void main(String[] args) {
TreeNode root=new TreeNode(8);
root.left = new TreeNode(6);
root.right = new TreeNode(10);
root.left.left = new TreeNode(5);
root.left.right = new TreeNode(7);
root.right.left = new TreeNode(9);
root.right.right = new TreeNode(11);
PrintFromTopToBottom(root.left);
}
}
打印输出:6 5 7 ,即从节点6开始从上往下打印二叉树的一部分
例2 ArrayList<Integer> 方法的返回
public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
ArrayList<Integer> leastNumbers = new ArrayList<Integer>();//定义输出数组......
return l leastNumbers;