у меня есть код случайного числа и случайных имен

#java

Вопрос:

я создаю код каждого раза, когда система подсказок будет генерировать случайный порядок имен и дней. в последнем есть цикл for, который генерирует случайный порядок имен и дней. в этом цикле for я также хочу добавить случайное число, для которого я также написал код. может ли кто-нибудь помочь мне напечатать случайное число вместе с этим.

  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 : "   );
     }
 

Комментарии:

1. Не могли бы вы описать, пожалуйста, ожидаемое поведение?

2. я хочу , чтобы система напечатала в одной строке 1 — имя , случайное число от 3 до 10 , день 2 — имя, случайное число от 3 до 10, день как таковой для всех 5 записей случайным образом

3. Все еще не уверен, правильно ли я тебя понял. Но если я правильно понял это: System.out.println("Engineer : " names.get(i) " " ";" (rand.nextInt((max-min) 1) min) " " "Shift Day : " days.get(i) "Shift hours : " );

4. это я уже делал выше. я хочу, чтобы случайное число было напечатано в цикле for

5. @TobiSH спасибо, парень, ты решил мою проблему.

Ответ №1:

Обновить

Из вашего комментария я понял, что вы хотите, чтобы для и использовался один и тот же случайный индекс names days .

Для этого вместо генерации случайных чисел для индексов вы можете хранить целые числа от 0 до размера одного из списка и рандомизировать этот список. Затем используйте значения из этого рандомизированного списка в качестве индекса для извлечения значений из двух списков. Это также гарантирует, что ни одна строка не является дубликатом любой другой строки.

 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));
        }
    }
}
 

Вывод пробного прогона:

 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 в этом случае нет необходимости.

 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)));
        }
    }
}
 

Вывод пробного прогона:

 john           Monday         
Bob            Tuesday        
john           Tuesday        
Bob            Wednesday      
Tom            Thursday       
 

Комментарии:

1. я хочу того же, что и вы, ответить ранее, сказав, что мне нужны случайные числа