java 内return语句总结

 return 在Java中作用                                       

引用:java 内return语句总结

       根据《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;

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值