A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yanyoucheng520 中级黑马   /  2014-7-15 14:17  /  1612 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天看到视频 装饰类的讲解时,遇到一个小问题,不是很理解,现在贴出代码,望大神指导下
class MyBufferedReader extends Reader
{
        private Reader r;
        public MyBufferedReader(Reader r)
        {
                this.r=r;
        }
        public String myReadLine()throws IOException
        {
                StringBuilder s=new StringBuilder();
                int ch=0;
                while((ch=r.read())!= -1)
                {
                        if(ch=='\r')
       
                                continue;
                       
                        if(ch=='\n')
                       
                                return s.toString();
                       
                        else
                                s.append((char)ch);       
                       
                }
                        if(s.length()!=-1)
                       
                                return s.toString();
                        return null;
        }
就是最后这两两句,卧室门已经return s.toString(),怎么后面还是返回空,那这前面这句有什么用啊

9 个回复

倒序浏览
因为你这函数需要返回值,其他的返回值不是在if里就是while里,所以需要添加一个函数的返回值
回复 使用道具 举报
陈云阳 发表于 2014-7-15 14:31
因为你这函数需要返回值,其他的返回值不是在if里就是while里,所以需要添加一个函数的返回值 ...

那最后面返回空值了吗
回复 使用道具 举报
首先要明确一点,myReadLine()方法有返回值类型,那么必须要有return语句。意思就是说,不管出现任何情况,都必须保证能够有一个return被运行,而且一旦运行到了return,直接跳出方法(注意是方法,而不是循环语句,这点跟break不同)。

读一行会出现三种情况,所以出现了三个

①一般情况
sdafdfadfaf
【末尾光标出现位置】

这种情况下,用到了第一个return语句,直接跳出循环,后面的代码不执行,所以return null自然也不运行。

②二般情况
sdafdfadfaf【末尾光标出现位置】

这时用第一个return语句没有起作用,用到了第二个return语句,其后的代码未执行。

③ 空文件
【末尾光标出现位置】

前面两个return语句都未起作用,第三个起作用,返回null,也就是空。

我说明白了么?
回复 使用道具 举报
貌似好像明白了,谢谢啊
回复 使用道具 举报
yanyoucheng520 发表于 2014-7-15 19:09
貌似好像明白了,谢谢啊

自己玩一下就明白了
回复 使用道具 举报
装饰类在那天的视频里?为什么我没有学到
回复 使用道具 举报
第19天 07 08的视频咯
回复 使用道具 举报
if(s.length()!=-1)
   return s.toString();
这是一个语句,只有if里的条件符合了,才会执行return s.toString();如果不符合条件,才会执行return null 吧!
回复 使用道具 举报
icris 中级黑马 2014-7-15 23:29:53
10#
建议自己写代码的时候 if 语句不要省略大括号,否则不容易检查,如最后一个建议写成这样
  1. if (s.length() != -1) {
  2.     return s.toString();
  3. }
复制代码

可以看出前面两个 return 都在 if 语句中,要通过编译就必须确保一定有一个 return 能够被执行,所以必须加上最后一句。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马