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

来源:2-3 随机生成算法测试用例

qq_非一般的感觉_3

2018-01-30

代码量太多了,相对于自己以前学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

其实你的这个丝路和我的代码思路是一样的啊!拿下来这一小节的课程官方的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
4
qq_非一般的感觉_3
回复
liuyubobobo
很好的类比,也就是说不管是c语言、java语言,还是其他什么语言,算法或者设计模式这种知识都是通用的。然后多敲,多总结,多学习内功。波波老师,受益良多! 提前祝您新年快乐!
2018-02-02
共4条回复

算法与数据结构(C++版) 面试/评级的算法复习技能包

课程专为:短时间内应对面试、升职测评等艰巨任务打造

11187 学习 · 1614 问题

查看课程