如何用java将1 10打乱顺序
更新时间:2023-06-16问题描述
我们需要设计一个程序,用Java语言将1到10的数值打乱顺序。程序应该接收默认数列1到10,并返回一个按照随机顺序排序后的数列。程序需要做好异常判断,确保生成的数列不会重复或者出现空值,同时确保程序的运行效率较高。
解决方案
将1到10的数值打乱顺序可以采用Java自带的Collections.shuffle()方法。该方法可以在列表中将元素随机排序。
Listnums = new ArrayList (); for(int i=1;i<=10;i++){ nums.add(i); } Collections.shuffle(nums); System.out.println(nums);
在上述代码中,我们首先新建一个ArrayList,并在其中添加1到10的整数。然后,使用Collections.shuffle()函数对列表进行随机排序,并输出随机生成的数列。这是一个最基本的解决方案。
改进方案
然而,上述方法并未考虑到程序的运行效率和异常处理。优化方案需要针对下列问题进行改进:
- 如何保证数列不会重复或者出现空值?
- 如何提高程序的运行效率?
- 如何优雅处理异常?
保证数列不会重复或者出现空值
我们可以使用数组来存储数列中的值。在循环中,每次生成一个随机数,将该数与数组中的元素进行比较,如果没有重复则添加到数组中。如果重复了则继续生成随机数。代码如下:
int[] nums = new int[10]; Arrays.fill(nums, -1); for(int i=0;i<10;i++){ int num = (int)(Math.random()*10)+1; while(contains(nums, num)){ num = (int)(Math.random()*10)+1; } nums[i] = num; } System.out.println(Arrays.toString(nums));
在这段代码中,我们首先新建了一个长度为10的数组,并使用-1填充了数组。在循环中,我们会生成一个随机数,将该数与数组中的元素进行比较,如果该数没有重复则添加到数组中。如果该数有重复,则继续生成随机数,直到找到一个不重复的数。
提高程序的运行效率
上述方法需要遍历整个数组,以及重复检查每个元素。这样的效率很低,我们可以尝试使用Java自带的HashSet集合类。
Setset = new HashSet (); int[] nums = new int[10]; for(int i=0;i<10;i++){ int num = (int)(Math.random()*10)+1; while(set.contains(num)){ num = (int)(Math.random()*10)+1; } set.add(num); nums[i] = num; } System.out.println(Arrays.toString(nums));
在这段代码中,我们首先新建了一个HashSet集合,用于存储数列中的数字。在循环中,我们会生成一个随机数,将该数与HashSet集合中的元素进行比较,如果该数没有重复则添加到HashSet集合中,并在数组中添加该数值。如果该数有重复,则继续生成随机数,直到找到一个不重复的数。
优雅处理异常
在以上代码中,我们并没有进行异常处理。我们需要特别考虑生成随机数重复的异常,当程序在循环中陷入死循环时,需要有机制终止程序。我们可以通过设置重试次数或者判断循环次数来解决该问题。代码如下:
Setset = new HashSet (); int[] nums = new int[10]; int tryCount = 0; while(tryCount < 10){ int num = (int)(Math.random()*10)+1; if(set.contains(num)){ tryCount++; continue; } set.add(num); nums[set.size()-1] = num; } if(set.size() < 10){ System.out.println("异常处理:生成重复数据次数过多!"); }else{ System.out.println(Arrays.toString(nums)); }
在这段代码中,我们首先新建了一个HashSet集合,用于存储数列中的数字。然后,我们会不断生成随机数,并将该数与HashSet集合中的元素进行比较,如果该数没有重复则添加到HashSet集合中,并在数组中添加该数值。如果该数有重复,则继续生成随机数,直到找到一个不重复的数。同时,我们计算了重试的次数,并与设定的阈值进行比较。如果重试次数过多,则认为程序有异常。
到此,我们就成功设计了一个Java程序,用于将1到10的数值随机打乱顺序。该程序确保了生成的数列中不会有重复数字或者空值,并且优化了程序的运行效率和处理了异常情况。我们可以根据实际需求灵活改变程序结构和算法实现,并在此基础上进行扩展。