c语言编程笔录

首页 >   > 笔记大全

笔记大全

如何用java将1 10打乱顺序

更新时间:2023-06-16

问题描述

我们需要设计一个程序,用Java语言将1到10的数值打乱顺序。程序应该接收默认数列1到10,并返回一个按照随机顺序排序后的数列。程序需要做好异常判断,确保生成的数列不会重复或者出现空值,同时确保程序的运行效率较高。

解决方案

将1到10的数值打乱顺序可以采用Java自带的Collections.shuffle()方法。该方法可以在列表中将元素随机排序。

List nums = new ArrayList();
for(int i=1;i<=10;i++){
    nums.add(i);
}
Collections.shuffle(nums);
System.out.println(nums);

在上述代码中,我们首先新建一个ArrayList,并在其中添加1到10的整数。然后,使用Collections.shuffle()函数对列表进行随机排序,并输出随机生成的数列。这是一个最基本的解决方案。

改进方案

然而,上述方法并未考虑到程序的运行效率和异常处理。优化方案需要针对下列问题进行改进:

  1. 如何保证数列不会重复或者出现空值?
  2. 如何提高程序的运行效率?
  3. 如何优雅处理异常?
保证数列不会重复或者出现空值

我们可以使用数组来存储数列中的值。在循环中,每次生成一个随机数,将该数与数组中的元素进行比较,如果没有重复则添加到数组中。如果重复了则继续生成随机数。代码如下:

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集合类。

Set set = 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集合中,并在数组中添加该数值。如果该数有重复,则继续生成随机数,直到找到一个不重复的数。

优雅处理异常

在以上代码中,我们并没有进行异常处理。我们需要特别考虑生成随机数重复的异常,当程序在循环中陷入死循环时,需要有机制终止程序。我们可以通过设置重试次数或者判断循环次数来解决该问题。代码如下:

Set set = 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的数值随机打乱顺序。该程序确保了生成的数列中不会有重复数字或者空值,并且优化了程序的运行效率和处理了异常情况。我们可以根据实际需求灵活改变程序结构和算法实现,并在此基础上进行扩展。