关于java基础中随机点名遇到随机数重复的问题

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    Random r = new Random();
    int[] people = new int[5];      //定义一个动态数组
    //定义循环,将员工工号存入数组
    for (int i = 0; i < people.length; i++) {
        System.out.println("请输入第" +(i + 1)+ "个员工工号");
        int inpu = sc.nextInt();
        people[i] = inpu;
    }
    for (int i = 0; i < people.length; i++) {
        //定义随机号,随机输出员工
    int ra = r.nextInt(people.length);

    int temp = people[ra];
    people[ra] = people[i];
    people[i] = temp;
    System.out.print(people[i] + "\t");
}
   
}

这是一开始写入的随机排名码,输出的代码是放在了for循环里面的,运行后的结果老是有重复的,当我在for循环外边添加一次循环输出,发现就不会再有重复了

System.out.println();
for (int i = 0; i < people.length; i++) {
    System.out.print(people[i]+"\t");
}

其实根本原因就是在于,在随机排序for循环里面输出的并不是真实的存储在数组里面的值,就是当你 i=1,随机数组=2,时输出people【i】=55,当你的 i=2,随机数组=1,这时你输出的还会是people【i】=55,但是i=1与i=2的值已经交换了,但是你在随机for循环里面输出是看不到的,所有要重新建立一个for循环,遍历一遍就能看到不重复的啦

Java,你可以通过创建一个包含学生姓名的数据结构,如ArrayList或HashSet,并使用Random类生成随机索引来实现这个功能。这里是一个简单的示例: ```java import java.util.ArrayList; import java.util.Random; class Student { String name; // 构造函数 public Student(String name) { this.name = name; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + '}'; } } public class RandomPointing { private ArrayList<Student> students; private Random random; public RandomPointing(ArrayList<Student> students) { this.students = students; this.random = new Random(); } public void pointStudents(int count) { if (students.size() < count) { System.out.println("Not enough students for the requested number of points."); return; } ArrayList<String> pointedNames = new ArrayList<>(); while (pointedNames.size() < count) { int index = random.nextInt(students.size()); String name = students.get(index).getName(); // 假设Student类有一个名为getName的方法获取名字 if (!pointedNames.contains(name)) { pointedNames.add(name); System.out.println(name + ", you're next!"); students.remove(index); // 从原始列表移除已点名的学生,防止重复 } else { // 如果随机重复的名字,重新选择 } } } public static void main(String[] args) { // 创建学生列表,例如 ArrayList<Student> studentList = new ArrayList<>(); studentList.add(new Student("Alice")); studentList.add(new Student("Bob")); // ... 更多学生 ... RandomPointing pointer = new RandomPointing(studentList); pointer.pointStudents(5); } } ``` 在这个示例,`pointStudents`方法会随机选择指定数量的同学,并确保不会重复点名。注意,为了简化,这里假设`Student`类有一个`getName()`方法来获取学生的姓名。实际应用,你需要根据实际情况调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值