#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. я хочу того же, что и вы, ответить ранее, сказав, что мне нужны случайные числа