首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我有随机数和随机名字的代码

我有随机数和随机名字的代码
EN

Stack Overflow用户
提问于 2021-04-17 03:28:09
回答 1查看 66关注 0票数 1

我正在编写每次提示系统将生成随机的名称和日期顺序的代码。在最后一个循环中有for循环,它生成名称和日期的随机顺序。在这个for循环中,我还想添加随机数,我也为它写了代码。有没有人可以帮我一起打印随机数呢?

代码语言:javascript
复制
 String[] engineers = {"john", "Bob", "Smith", "Tom", "Ryan"}; 
  List<String> names = Arrays.asList(engineers);
  Collections.shuffle(names);
     
  // for generating randon number 
  int min = 3;
  int max = 10;
  Random rand = new Random();
  
  int a = rand.nextInt((max-min)+1) + min;
  int b = rand.nextInt((max-min)+1) + min;
  int c = rand.nextInt((max-min)+1) + min;
  int d = rand.nextInt((max-min)+1) + min;
  int e = rand.nextInt((max-min)+1) + min;
  
  //System.out.println(a);
  //System.out.println(b);
  //System.out.println(c);
  //System.out.println(d);
  //System.out.println(e);
  
  // for shuffle day generation
  String[] day = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday"};
  List<String> days = Arrays.asList(day);
  Collections.shuffle(days);  
  
     for(int i = 0; i < Integer.min(days.size(), names.size()); i++){
        System.out.println("Engineer : " + names.get(i) + " "+ ";"+ " " + "Shift Day : " + days.get(i) + "Shift hours : " + );
     }
EN

回答 1

Stack Overflow用户

发布于 2021-04-17 04:17:37

更新

从您的评论中,我了解到您希望对namesdays使用相同的随机索引。

为此,您可以存储从0到列表之一大小的整数,并随机化该列表,而不是为索引生成随机数。然后,使用这个随机化列表中的值作为索引,从两个列表中检索值。这还将确保没有任何行与任何其他行重复。

代码语言:javascript
复制
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        String[] day = { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" };
        List<String> days = Arrays.asList(day);

        String[] persons = { "john", "Bob", "Smith", "Tom", "Ryan" };
        List<String> names = Arrays.asList(persons);

        // Store indices into a List and randomize it
        List<Integer> randIndices = new ArrayList<>();
        for (int i = 0; i < day.length; i++) {
            randIndices.add(i);
        }
        Collections.shuffle(randIndices);

        for (int i = 0; i < Integer.min(days.size(), names.size()); i++) {
            int index = randIndices.get(i);
            System.out.println("Day " + index + ": " + days.get(index) + ", Engineer: " + names.get(index));
        }
    }
}

示例运行的输出:

代码语言:javascript
复制
Day 2: Wednesday, Engineer: Smith
Day 4: Friday, Engineer: Ryan
Day 0: Monday, Engineer: john
Day 1: Tuesday, Engineer: Bob
Day 3: Thursday, Engineer: Tom

原始答案

我建议您使用ThreadLocalRandom.current().nextInt(int origin, int bound)在指定的原点(包含)和指定的边界(排除)之间生成一个伪随机int索引值。

此外,由于您使用的是随机索引,因此在这种情况下不需要使用Collections.shuffle

代码语言:javascript
复制
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.ThreadLocalRandom;

public class Main {
    public static void main(String[] args) {
        String[] day = { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" };
        List<String> days = Arrays.asList(day);
        // Collections.shuffle(days); // Unnecessary

        String[] persons = { "john", "Bob", "Smith", "Tom", "Ryan" };
        List<String> names = Arrays.asList(persons);
        // Collections.shuffle(names); // Unnecessary

        for (int i = 0; i < Integer.min(days.size(), names.size()); i++) {
            System.out.printf("%-15s%-15s%n", names.get(ThreadLocalRandom.current().nextInt(0, i + 1)),
                    days.get(ThreadLocalRandom.current().nextInt(0, i + 1)));
        }
    }
}

示例运行的输出:

代码语言:javascript
复制
john           Monday         
Bob            Tuesday        
john           Tuesday        
Bob            Wednesday      
Tom            Thursday       
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67131150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档