随机生成算法的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回答
-
其实你的这个丝路和我的代码思路是一样的啊!拿下来这一小节的课程官方的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类的对象:)
所以,没有那么复杂。数数代码行数,差不多的:)
142018-02-02
相似问题