请稍等 ...
×

采纳答案成功!

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

随机生成算法的java代码太复杂了

代码量太多了,相对于自己以前学java的时候,

只需要以下几行代码就可以实现随机数

public class RandomDemo {
        public static void main(String[] args) {
            Random r = new Random();
            for (int i = 0; i <1000; i++) {
                int nextInt = r.nextInt(10)+10;
                System.out.println(nextInt);
            }
         
        }
}

敲了一下老师的代码,得理解个半天,代码能简化?

难道是算法就是这么如此复杂?

波波老师,学生愚昧 请耐心讲解

正在回答

1回答

liuyubobobo 2018-01-31 02:32:09

其实你的这个丝路和我的代码思路是一样的啊!拿下来这一小节的课程官方的java代码,我们分析一下:)地址:https://github.com/liuyubobobo/Play-with-Algorithms/blob/master/02-Sorting-Basic/Course%20Code%20(Java)/03-Selection-Sort-Generate-Test-Cases/src/bobo/algo/SortTestHelper.java


public static Integer[] generateRandomArray(int n, int rangeL, int rangeR) {    
    assert rangeL <= rangeR;    
    
    Integer[] arr = new Integer[n];    
    for (int i = 0; i < n; i++)    
        arr[i] = new Integer((int)(Math.random() * (rangeR - rangeL + 1) + rangeL));    
    return arr;    
}


我们的代码最大的不同就是,我的代码将随机数组的生成封装成了一个函数,可以生成一个含有n个元素的随机数组,每个元素的随机范围在[rangeL,rangeR]之间。n,rangeL和rangeR可以由用户指定。在后面,你会看到我们在一个Main函数中要测试多组测试用例,就能看到这样封装的好处。


正因为如此,在我的代码里,需要new这个数组,最后再return回去,你的代码只是生成一组随机数,数组长度和随机数范围都是固定的,然后打印出来。打印出来的数据由于没有保存,不能传给我们制作的算法去运行。


在具体随机数的生成上,你的方法更好,因为直接使用了Java的Random类。我的代码则是生成一个随机的[0, 1)之间的浮点数,然后映射成[rangeL, rangeR]的区间中。你的方法由于直接使用包装好的Random类,所以看起来语意更清晰;不过我的方法也是常规的随机数生成的标准方法,而且一来不需要import java.util.Random;二来也不用实例化一个Random类的对象:)


所以,没有那么复杂。数数代码行数,差不多的:)

1 回复 有任何疑惑可以回复我~
  • 非常感谢!
    回复 有任何疑惑可以回复我~ 2018-02-01 21:30:48
  • 波波老师,之前我学的是Java,喜欢玩java,尤其喜欢面向对象的那种思想。但是在之后接触电商项目时(前端是AngularJs+bootstrap,后端是ssm+dubbox),总感觉是代码在玩我,没有掌控感,让我很不爽,很是迷茫。
    然后是在网上寻找,不经意间看见一位大神写的自身学编程的经历——说刚开始在大学学的算法,后又去了阿里当实习生还是学算法,干了几年之后辞职竟然选择做项目,几乎从头开始学,但是他说不管接触那些技术,一点就通,上手很快,让我很是不解,说学算法是练内功。
    之后,抱着试一试的心态,机缘巧合让我碰见了波波老师,老师讲解的很好,孰优孰劣分析的很不错,但是,我也是大致理解了,估计是因为更接触算法的缘故吧。
          技术总在不断更新,身为一名程序员总是疲于奔命的学完这个学那个,其实蛮好的,可就是上手慢,总是被代码虐,不知自己差在哪,是没学算法?很是迷茫!
          波波老师,解解学生心中的疑惑,指明方向。
    回复 有任何疑惑可以回复我~ 2018-02-01 22:38:01
  • liuyubobobo 回复 提问者 qq_非一般的感觉_3 #3
    我不确定你的实际情况。但是以我的经验,除了内功高低这个因素,代码量也很重要。不熟悉一个东西,被玩儿了很正常。该开始学小提琴,肯定是被小提琴玩儿,掌握不住的。弹久了才能慢慢掌控住小提琴。代码也是如此,写多了才能慢慢掌控住。当你把小提琴弹熟了,再去学大提琴中提琴,会觉得很容易,都是弦乐器。这就好比从一个语言转到另一个语言,从一个框架转到另一个框架,其实他们有很强的共通性。提琴玩儿熟了,转钢琴也会比新手快很多,虽然一个是弦乐,一个是键盘。为什么?因为乐理知识是共通的。乐理知识就是算法,设计模式这样的内功,他们在乐器演奏领域发挥着共同的作用。不仅仅是乐器演奏,乃至去研究作曲,编曲,指挥,甚至演唱,都能帮你比“新人”更快的“上手”。这就是内功的作用。总结:我的经验,两点:1)多编。这个其实要放在第一位。不编,看书再多,没什么用。2)在多编的基础上,注重内功的学习。加油!
    回复 有任何疑惑可以回复我~ 2018-02-02 02:43:11
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信