请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师您先看眼图,我用Java代码实现的计算数组排序时间的方法

图片描述
图片描述bobo老师为啥直接放入comp会报>错误数目的参数错误?我搞不明白为啥还要Object[] obj =Object[]{comp};我看了invoke方法的API了,它第一个参数是调用的类的全类名,第二个参数是给方法形参赋值的实参, invoke它两个参数(Object obj, Object…args)后面这个参数是个可变个数形参,可以写成Object[] args=new Object[]{各种数据类型的参数},我试了直接放入后就会光标提示下图
图片描述
我不知道是哪里理解出了问题,就这个testSort方法创建时候Object[] obj =Object[]{comp};没看明白
后续一些想法图片描述
图片描述
其实我本来想了想删了这个提问的,感觉这个问题不属于算法范畴,但好像慕课又不能删提问,而且我感觉我写的这个方法并不是很通用只针对了引用数据类型,每次要是测试别的排序方法得改那个要测试的方法名就是getDeclaredMethod()第一个参数

正在回答

1回答

直接传入 comp 和传入你的代码中的那个 obj 是不同的。


comp 是一个数组,其中承载了所有待排序的元素;

obj 是一个数组,这个数组中只有一个元素,这个元素就是 comp 数组。


之所以这么写,是因为我们需要把 comp 打成一个针对排序算法的参数。

比如 comp 里有 100 个数字。

如果传入的是 obj,就是在说,这个排序算法里需要一个参数,这个参数是 comp 这个数组;

如果传入的是 comp,就是在说,这个排序算法需要 100 个参数,这 100 个参数在 comp 数组中。

而前者是符合我们的排序算法的说明的。


“我写的这个方法并不是很通用只针对了引用数据类型”

这句话我没有很懂,你具体是指在什么数据类型下这个测试函数不能胜任?


1 回复 有任何疑惑可以回复我~
  • 提问者 我会回来的333 #1
    谢谢老师回答,最后老师您没有理解的这个是指,这个testSort()不能测试基本数据类型,只能测试包装类/String/自定义类,我的这个方法的另一个局限在那个getDeclaredMethod()方法第一个参数每次必须以字符串形式放入需要获取的运行时类的指定方法的名字,第一次用慕课网,感觉慕课网的回答系统应该重做了,这么小的框框,让老师怎么回答问题,唉,最后,您回答我的问题啊,我还是没有看明白 : ) comp和obj两个变量存的数组的地址值,值传递除了基本数据类型和字符串字面量的形式传的是实际值,而引用数据类型值传递传的地址值,这个selectionSort(Comparable[] comp)不就是要以多态的形式传一个引用类型的数组的地址值进去么?
    回复 有任何疑惑可以回复我~ 2021-04-28 19:04:39
  • liuyubobobo 回复 提问者 我会回来的333 #2
    理解了。是的,这本身是 java 的局限性。在 java 的标准库内不也是这样的,对象的处理和基本数据类型的处理是分开的。关于 comp 和 obj,和地址不地址没关系,这两个变量完全不同。obj 是一个一维数组,里面有一个元素,是一个 n 维数组 comp,而 comp 就直接是一个 n 维数组。{{1, 2, 3, 4, 5}} 和 {1, 2, 3, 4, 5} 是不一样的。
    回复 有任何疑惑可以回复我~ 2021-04-29 09:21:50
  • 提问者 我会回来的333 #3
    非常感谢!
    回复 有任何疑惑可以回复我~ 2021-05-13 17:32:58
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信