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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

public class Text
{
        private static int j=0;
        private static boolean methodB(int k)
        {
                j +=k;
                return true;
        }
        public static void methodA(int i)
        {
                boolean b;
                b=i<10|methodB(4);
                b=i<10||methodB(8);
        }
        public static void main(String[] args)
        {
                methodA(0);
                System.out.println(j);
        }

}
      这段小代码,是毕向东老师第十天视频里的一个小练习题,按照道理来说,应该不会出现问题,但我在这段代码上着实有点想不清楚。但是一旦想通了,也就觉得这个代码没什么意思了。其实也是,这段代码毫无实用性可言,唯一的作用就是检验这段时间学习的质量。我把他记录下来,记录下自己的问题,方便自己以后的复习,另外,也是没准是哪位朋友也不懂这个呢?
       首先,做起码的逻辑我是明白的。运行主函数的时候,首先运行methodA方法,int i=0,将0带入methodA方法中。但是首先我不明白的是,boolean b,到底有个什么用?
       我的结论是,没有用。这只是定义了一个boolean型变量而已,只是用于下面程序的运行。如果我们要的是System.out.println(b),那我们就能知道b的值是true还是false了,但是在本段代码中,b的值是无所谓的。
       接下来就是|和||的区别了。一步一步的看,当将i=0传入函数的时候,我们开始运行第一行:b=i<10|methodB(4);这个时候methodB开始运行,给k赋值为4,运行methodB,结果为j=4;然后返回值为true。b=true|ture,结果为true,虽然b的值没有什么用。
       然后运行第二段:b=i<10||methodB(8);程序从左开始运行,当运行到i<10的时候,很明显,0<10是true的,根据||的特点,两边至少有一个true的时候结果就是true,所以当||左边为true的时候,程序根本就不运行||右边的代码,所以methodB(8)这段代码根本就没有运行,所以8这个数值就根本就没有传入到methodB中,所以j还是为4。所以这个b的值到底是什么根本没什么影响,这里只是考我们,计算机运行哪一步,运行到哪里。
       让我不理解的第二个点就是:methodA中为何要返回一个true呢?直接privat static void methodB(int k)不行么?不要返回值。在这块我也想了一会,其实这个更简单,因为methodB()要用于下面的判断,用于|和||的判断,两边类型只能是boolean型函数。
       所以只是一个很简单的代码,但是却让我想了很久。这其实也是体现出我基本功根本不扎实,有些地方一眼就能看破的,我却要想好久,这个真是督促我,打好基础。
      另一个我也是发现,我读代码的时候,都会发现里面的好多小细节,那这个代码的编写者,是得多细心,才能注意这些细节啊。||和|的区别运用,两边必须是boolean型,所以上面函数的返回值也是boolean型返回值。这些细节,都是以后的学习中需要注意的,以后自己编代码,也是要如此。
       这是我对这题的理解,可能大家觉得没什么,但是还真是想了好久。哈哈,希望大家多多交流。

13 个回复

正序浏览
StormPeng 发表于 2015-9-21 07:17
我是觉得,这么一小段代码,你可以有感的写出这么一大段,感觉你还是很厉害的。 ...

其实仔细看看,还真没啥又技术含量的东西
回复 使用道具 举报
a4903913 发表于 2015-9-21 15:33
我只能膜拜!!!!!!!!!!

谢谢同学啦。。。。很低级的东西其实 嘿嘿
回复 使用道具 举报
我只能膜拜!!!!!!!!!!
回复 使用道具 举报
maxwell247 发表于 2015-9-21 14:26
讲得很详细,谢谢。关于 长路运算和短路运算确实需要注意。 thanks
关于楼主的描述,我提炼了一下。

恩,你这个提炼的就很简练。我这以后的日记也要向你学习了。
回复 使用道具 举报
heshiwei 发表于 2015-9-21 14:54
同学,我有个建议:
1.你的笔记可以在简化一点,去掉一些可有可无的废话,比如

恩,确实,楼上总结的就很好。我的确实废话比较多了点,在刚看完这个小练习题就直接写出来了,没有后期整理。这点以后我会注意的。谢谢同学的建议
回复 使用道具 举报
同学,我有个建议:
1.你的笔记可以在简化一点,去掉一些可有可无的废话,比如
所以只是一个很简单的代码,但是却让我想了很久...


2.把问题分成几点来回答,回答也分成1、2、3、4几点。

3.从中得到的启发,以及总结分成1、2、3、4
回复 使用道具 举报
本帖最后由 maxwell247 于 2015-9-21 14:34 编辑

讲得很详细,谢谢。关于 长路运算和短路运算确实需要注意。 thanks
关于楼主的描述,我提炼了一下。

这里有两个问题:
1、methodA中的变量b没作用。真正起作用的是 | 和 || 运算符。
b= i<10 | methodB(4) --> 左边为true,右边还需要计算。 调用method(4)后 j=4;
b= i<10 || methodB(8) --> 左边为true,右边不再计算,所以method(8)根本没调用。
--> 所以 输出结果为 4
2、methodB的返回类型为boolean。因为它的返回值要参与逻辑运算。

回复 使用道具 举报
Anmyre 中级黑马 2015-9-21 09:25:56
7#
学习了 学习了
回复 使用道具 举报
楼主很细心,整理的很好
回复 使用道具 举报
继续坚持
回复 使用道具 举报
我是觉得,这么一小段代码,你可以有感的写出这么一大段,感觉你还是很厉害的。
回复 使用道具 举报

谢谢啦,也是刚刚开始。会保持这个习惯的。
回复 使用道具 举报
很好的习惯。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马