有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java标准问题

Random random = new Random();
String randomLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
for (int n=0; n<=25; n++)
System.out.print(randomLetters.charAt(random.nextInt(randomLetters.length())));

当打印随机26个字母有重复的字母我想打印随机26个字母没有打印重复的字母

这个结果显示给我看

  FXNJZMQWFTSKLRRFHOYWGTIQPWBUILD

共 (4) 个答案

  1. # 1 楼答案

    您需要删除刚刚从字符串中选择的索引。因此,如果将该字符串更改为stringbuilder,则可以使用函数deleteCharAt(index)

    希望有帮助

  2. # 2 楼答案

    因为只有26个字母,我假设你只需要随机排列的大写字母表。要实现这一点,您应该使用^{}方法。一种方法是:

    List<Character> letters = new ArrayList<>();
    for (char letter = 'A'; letter <= 'Z'; letter++) {
        letters.add(letter);
    }
    Collections.shuffle(letters);
    letters.forEach(System.out::print);
    

    注意,如果您没有使用Java 8,那么最后一行将不会编译,因为它使用了^{}method reference-Java 7中的等效循环如下所示:

    for (Character letter : letters) {
        System.out.print(letter);
    }
    

    (在这里使用char也是有效的,但是我避免了一些自动取消绑定,可能没有什么区别)

  3. # 3 楼答案

    要打印唯一的字符,我需要一个从0到26的数字列表,将其洗牌,然后通过迭代打印字符,例如:

    List<Integer> numbers = new ArrayList<Integer>();
    for(int i = 0 ; i < 26 ; i++){
        numbers.add(i);
    }
    Collections.shuffle(numbers);
    String randomLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    for(int index = 0 ; index < numbers.size() ; index++){
        System.out.print(randomLetters.charAt(numbers.get(index)));
    }
    
  4. # 4 楼答案

    您可以使用StringBuilder删除每次打印的字母,这样就不会再次打印

    Random random = new Random();
    String randomLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    for (int n=25; n>=0; n--){
        StringBuilder sb = new StringBuilder(randomLetters);
        int index = random.nextInt(randomLetters.length());
        char c = randomLetters.charAt(index);
        System.out.print(c);
        sb.deleteCharAt(index);
        randomLetters = sb.toString();
        }