Java如何打印所有字符串数组,随机,没有重复

问题描述 投票:1回答:2

你能告诉我如何随机打印所有字符串数组,但没有重复。我不想使用Lists,Collection.shuffle。

我尝试:

String names[] = { "name1", "name2", "name3", "name4", "name5" };
System.out.println(names[rand.nextInt(groupMembers.length - 1)]);

我想要打印所有名字,但是只是洗了一次。像这样的东西:

name4,name1,name2,name5,name3

arrays string random
2个回答
0
投票

这是代码,但你要问的是不必要的代码复杂化:

public static void main(String [] args) {
        String names[] = { "name1", "name2", "name3", "name4", "name5" }; 
        int upper = names.length;
        int lower = 0;
        int r=0;

        Set<Integer> uniqueList = new HashSet<Integer>();//This is the set which is used to make sure elements in the array are printed only once
        for(int count=0;count<names.length;count++){
            uniqueList.add(count);
        }

        while(!uniqueList.isEmpty()){
            r =  (int) (Math.random() * (upper - lower)) + lower;//generate a random number
            if(uniqueList.contains(r)){//if the random number lies between array length, then print the random name and remove it from set so that it wont print duplicate

                uniqueList.remove(r);
                System.out.println(names[r]);
            }   
        }
    }

0
投票

尝试使用javascript解决这个问题,对这个逻辑感到非常有趣。

这是我尝试的算法:找到

  1. 0和数组中尚未打印的项目数之间的随机数(n)。
  2. 在该位置打印该项目(名称[n])
  3. 用数组中的最后一项切换元素
  4. 重复,直到我们完成数组中的所有项目。

此算法将仅使用单个数组,并且在打印完所有项目后,我们将按照与其打印的相反顺序更新列表。

var names = ["name1", "name2", "name3", "name4", "name5"];

function switchItem(arr, from, to) {
  let temp = arr[from];
  arr[from] = arr[to];
  arr[to] = temp;
  return names;
}

function getRandomUniqueValues(values) {
  for(var i = 0; i < values.length; i++) {
    let randomPosition =  Math.floor(Math.random() * Math.floor(values.length - i -1));
    console.log(values[randomPosition]);
    values = switchItem(values,randomPosition,values.length - 1 - i)
  }
}

getRandomUniqueValues(names);
© www.soinside.com 2019 - 2024. All rights reserved.