一道c++的题目,改为java版本后发群里,引众多java码农争论

去年曾经一道c++的题目在网上引发众多码农的热议,题目就是两个函数,在第一个函数中定义了变量a与b的值,而且调用了第二个函数,而第二个函数是一个空函数,有两个参数a与b, 第一个函数末尾打印出了a与b的值,要求同个实现第二个方法,达到打印出来a,b的值是交换后的效果。java

打开百度App,看更多图片python

针对这样一个题目,有好多c++的码农们争相讨论,当时有部分人耍了一点小聪明,实现思路是在第二个函数中直接将a,b的直交换而后打印出来,并退出整个程序,让第一个函数中的打印再也不继续执行,虽然这样的作法不是出题人预想的套路,可是确实也达到了要求的结果,只有少人码农网友给出了正确答案,那就是经过内存寻址的方式直接调整a与b的值,想必这个思路才是出题人想要的那种吧。c++

很巧的是,这个题目今年又有人出了一个java版的,既然两种语言不同,固然实现思路也是不同了,咱们把这个java版的题目贴出来,看看码农们都是怎么回答的吧,让咱们一块儿看看他们的思路是什么吧。程序员

网友一:这个题目写a=a+b,b=a-b,a=a-b基本能够断定java还没入门了。算法

上世是朵花:固然,这种状况下是值传递,彻底达不到意想的效果。函数

网友二:就是为了交换值类型把值类型封装成引用类型,再把引用类型指向的内存地址的值交换的无聊操做设计

上世是朵花:虽然思路是这样,可是java与c的实现方式差异很大。对象

网友三:python的变量也是引用类型啊,a,b=b,a就完事了图片

上世是朵花:没错,若是是python的话,解决这个问题就显得更为直接了。内存

网友四:考java语法有啥意义,还不如考算法。

上世是朵花:这样的题目只能是拿出来交流用,在实际工程中压根碰不上这样的场景,若是出现这样的场景,只能说程序者的设计思路太奇葩了

网友五:可能有些人不会Java,只是按照本身熟悉的语言理解,你只站在本身视角来看未免太狭隘

上世是朵花:没错,从上面的回答就能看出有的网友是其余语言的思路。

网友六:光从题目看,+-^多种作法,学的时候或者培训的都讲过,不管是c仍是Java,考新人见过,写反射的那个从题目上没毛病,体现多会一点

上世是朵花:这个题目有网友用反射的思路实现了,请看上面的那个图。

网友七:异或就能够

上世是朵花:是不能够的,若是在第二个方法中去实现的话,传值的方式,在第二个方法任凭你怎么修改就是没法改变的哦。

网友八:涉及到引用,值传递,IntegerCache还有反射这些知识点。并非用异或或加减操做一下就能够的。仍是要动手,要认识到你是苦逼的javaer,并非c。

上世是朵花:没错,这名网友的观点是正确的,针对一样的题目,java天然有java的思路。

可见这个题目,回答正确的人并非不少啊,大多数人都知道a=a+b,b=a-b,a=a-b 这样的方式是不能够的,但是有部分人却误认为a=a^b;b=a^b;a=a^b;这种方式是能够的,其实否则,若是是放在第一个方法中去实现,这两种方式显然是均可以的,可是在第二个方法中去实现就彻底是另外一种思路,首先经过简单的值传递,不论你怎么努力,倒是丝绝不会改变a与b的值的,c++中的思路是经过直接修改内存的方式来修改a与b的值,而java呢,固然java中全部对象都算是一个引用,可是这里交换对象的自己,针对这样的场景,java自有java的思路,提到反射来讲,其余语言的程序员可能以为过于复杂了点,不过,话又说回来,这样的题目也只能在平时交流时提提而已,实际的项目工程中绝对不会出现这种场景的,若是要是出现了,只能说设计程序人思路很奇葩,这是本身在给本身找困难,针对这样的问题,不一样语言有不一样的语言的解决办法,只不过有的语言相对轻松,而有的语言就须要费一番周折了。

以上全部图片均来之互联网

你们好,我是“上世是朵花”。若是你有什么好的见解或者观点能够在评论区展示你的才华,互动交流,若是想进一步了解我,那就关注我吧!

相关文章
相关标签/搜索