@Max2888888

Как получить из массива 5 случайных значений без повторений и записать их в одну переменную? [JAVA]?

Нужно из массива получить 5 случайных значений и записать их в одну переменную типа String, подскажите как это можно реализовать что бы не было дублей, скидываю свой код для примера, не смейтесь с него)

public class Test {
  public static void main(String[] args) {
    String[] shops = {"DE", "CH", "AT", "NL", "FR", "DK", "ES", "IT", "EN", "SE", "NO", "FI", "PT", "BE", "LU", "RO", "GR", "CZ", "PL", "HU"};

    String shopsForTest = (shops[new Random().nextInt(shops.length)]) + "+" + (shops[new Random().nextInt(shops.length)]) + "+" + (shops[new Random().nextInt(shops.length)]) +
            "+" + (shops[new Random().nextInt(shops.length)]) + "+" + (shops[new Random().nextInt(shops.length)]);
    System.out.println(shopsForTest);
      }


5cefb85df090b019495480.jpeg
  • Вопрос задан
  • 683 просмотра
Решения вопроса 1
@Braidner
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

class Scratch {
    public static void main(String[] args) {
        String[] shops = {"DE", "CH", "AT", "NL", "FR", "DK", "ES", "IT", "EN", "SE", "NO", "FI", "PT", "BE", "LU", "RO", "GR", "CZ", "PL", "HU"};

        List<String> shopList = Arrays.asList(shops);
        Collections.shuffle(shopList);
        String result = shopList.stream().limit(5).collect(Collectors.joining("+"));
        System.out.println(result);
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
@UNy
Делаешь цикл с 5 итерациями, делаешь рандом после получения значения удаляешь его из массива(используй array list) и добавляешь в string builder.
Ответ написан
Комментировать
TheRonCronix
@TheRonCronix
В цикле от 1 до 5:
{
Выбирите индекс с случайным значением от 0 до shops.length-1.
Выберите значение из shops по этому индексу и сохраните/выведите куда-либо кда вам надо.
Удалите выбранный элемент из shops.
}
Ответ написан
Комментировать
@Phobos911
String[] shops = { "DE", "CH", "AT", "NL", "FR", "DK", "ES", "IT", "EN", "SE", "NO", "FI", "PT", "BE", "LU",
				"RO", "GR", "CZ", "PL", "HU" };
		List<String> list =  new ArrayList<String>(Arrays.asList(shops));
		StringBuilder builder = new StringBuilder();
		int count =0;
		while (count < 5) {
			Random r = new Random();
			int rand = r.nextInt(list.size());
			builder.append(list.get(rand)).append(" ");
			list.remove(rand);
			count++;
		}
		String shopsForTest = builder.toString();
		System.out.println(shopsForTest);
Ответ написан
Комментировать
@Max2888888 Автор вопроса
TheRonCronix UNy

Изменил массив на список, создал цикл с 5 итерациями, сделал рандом значения из списка, разобрался как удалить по индексу и завис. Уже ближе стал к решению, но не могу разобраться, как пользоваться "string builder". То есть как из каждой итерации цикла, мне к переменной String записывать новое значение не стирая предыдущее ?

public class Test {
  public static void main(String[] args) {

    StringBuilder builder = new StringBuilder();

    List shops = new ArrayList();
        shops.add("DE");
        shops.add("CH");
        shops.add("AT");
        shops.add("NL");
        shops.add("FR");
        shops.add("DK");
        shops.add("ES");
        shops.add("IT");
        shops.add("EN");
        shops.add("SE");
        shops.add("NO");
        shops.add("FI");
        shops.add("PT");
        shops.add("BE");

    int index = 0;
    for (int x = 0; x < 5; x++) {
      Random random = new Random();
      index = random.nextInt(shops.size());
      System.out.println(shops.get(index));

//      shops.remove(index);
    }

    String shopsForTest = shops.get(index) + "+";
    System.out.println(shopsForTest);
  }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы