Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
随机数组生成器Java_Java_Arrays_Random - Fatal编程技术网

随机数组生成器Java

随机数组生成器Java,java,arrays,random,Java,Arrays,Random,我需要使用[a,…z]和[a,…z]之间的1000随机字符初始化一个字符数组 我不想首先只生成介于[a,…z]之间的字符,然后只生成[a…z]中的字符,而是平等地对待所有52个字符 我知道这样做的一种方法是生成一个介于0和51之间的随机数,并为其指定一个字符值 我该如何处理这个问题,或者为0到51之间的随机数赋值?让我给你一些一般性的指导。你提到的“一种方法”很有效。我建议使用HashMap。您可以在文档中阅读有关hashmaps的更多信息: 或者,您可以使用另一个包含-z和a-z的数组,并且

我需要使用
[a,…z]
[a,…z]
之间的
1000
随机字符初始化一个字符数组

我不想首先只生成介于
[a,…z]
之间的字符,然后只生成
[a…z]
中的字符,而是平等地对待所有52个字符

我知道这样做的一种方法是生成一个介于0和51之间的随机数,并为其指定一个字符值


我该如何处理这个问题,或者为0到51之间的随机数赋值?

让我给你一些一般性的指导。你提到的“一种方法”很有效。我建议使用
HashMap
。您可以在文档中阅读有关hashmaps的更多信息:

或者,您可以使用另一个包含-z和a-z的数组,并且可以使用索引号来引用它们。但在这种情况下,我认为使用
HashMap
更有意义

我想你知道如何创建一个
Random
对象。但如果您没有,请查看以下文档:


因此,您基本上使用
Random
类的
nextInt
方法来生成一个随机数。您可以将该随机数放入
HashMap
或数组中。然后你只需把你得到的字符放入一个数组,这个数组存储程序的结果。

你就有了有趣的代码思想。 可能是这样想的

  • 获取所有a-z和a-z并将它们存储在数组[]中
  • 随机生成一个介于1-52之间的数字(使用API类)
  • 您将在步骤2中获得一个数字,将其作为数组索引,并从字符的
    array[]
    中选择此索引
  • 将拾取的字符放置到所需的位置/格式
  • 处理它

  • 致以最良好的祝愿。

    这是样本工作,希望这对您有用

    import java.util.ArrayList;
    import java.util.Random;
    
    public class RandomNumber {
    
        public static void main(String args[]) {
            char c;
            ArrayList<Character> character = new ArrayList<Character>();
            Random rn = new Random();
            for (int i = 0; i < 500; ++i) {
    
                character.add((char) (rn.nextInt(26) + 66));
                character.add((char) (rn.nextInt(26) + 97));
            }
    
            System.out.println(character);
        }
    }
    
    import java.util.ArrayList;
    导入java.util.Random;
    公共类随机数{
    公共静态void main(字符串参数[]){
    字符c;
    ArrayList字符=新的ArrayList();
    Random rn=新的Random();
    对于(int i=0;i<500;++i){
    字符添加((字符)(注册号nextInt(26)+66));
    字符添加((字符)(注册号nextInt(26)+97));
    }
    System.out.println(字符);
    }
    }
    
    最简单的方法是:

    // constant declared in the class
    static final int LETTERS_COUNT = 'z'-'a'+1;
    
    char[] randomChars = new char[500];
    Random r = new Random();
    for(int i=0; i<randomChars.length; i++) {
        randomChars[i] = (char)(r.nextInt(LETTERS_COUNT) + (r.nextBoolean() ? 'a' : 'A'));
    }
    
    //类中声明的常量
    静态最终整数字母_计数='z'-'a'+1;
    char[]randomChars=新字符[500];
    随机r=新随机();
    
    对于(inti=0;i,可以使用数组或算术的函数来实现这一点。 请注意,您可以使用与数字类似的字符进行计算,因为它们存储为数字(),您还将注意到数字、小写字母和大写字母是按顺序存储的,因此使用简单的for循环访问范围非常容易

    private Random r = new Random();
    public char randomLetter() {
        int randomNumber = this.r.nextInt(52);
        if(randomNumber >= 26) {
            return (char)(('A'+randomNumber)-26);
        } else {
            return (char)('a'+randomNumber);
        }
    }
    
    使用数组的版本会更快,但只有在可能的结果集足够小,可以存储时才能使用

    private Random r = new Random();
    private static char[] set = new char[52]; //static because we only need 1 overall
    static { //this is a static "constructor"
        for(int i = 0; i < 26; i++) {
            set[i] = (char)('a'+i);
            set[i+26] = (char)('A'+i);
        }
    }
    
    public char fastRandomLetter() {
        final int randomNumber = this.r.nextInt(52);
        return set[randomNumber];
    }
    
    private Random r=new Random();
    私有静态字符[]集=新字符[52];//静态,因为我们总共只需要1个字符
    静态{//这是一个静态的“构造函数”
    对于(int i=0;i<26;i++){
    设置[i]=(字符)('a'+i);
    设置[i+26]=(字符)('A'+i);
    }
    }
    公函{
    最终整数随机数=this.r.nextInt(52);
    返回集[随机数];
    }
    
    我填充了一个大小为51的数组,并用ascii数字填充大写字母和小写字母,然后在我的第一个数组中使用随机生成器填充大小为1000的主数组。这听起来如何第一阶段是获得1-52(a-z,a-z)范围内的随机字符,当你得到一个字符,然后在一个循环中填充到1000大小的数组索引中。这不是OP要求的。他/她不想分别生成a-z和a-z。我有一个1000大小的数组,其中包含整个字母表的大写字母和小写字母。我如何打印生成的小写字母总数nd生成的大写字母总数?以及每个字母生成的数量计数(显示字母和生成的数量)以及字母所代表的总数的百分比。如果你想访问很多随机值,哈希集不是一个坏主意吗?但我想对于初学者来说,你应该不太关心性能。在这种情况下,最有意义的是存储键值对中的内容。嗯,我从未使用过哈希集,但它们似乎没有检索功能/get方法将接受一个随机值。那么如何使用hashset大量创建随机结果呢?我知道你可以使用HashMap,就像一个assoziative数组一样。但是hashset?对不起!@希望有帮助我实际上是指HashMap。现在我终于意识到我的愚蠢错误了!
    private Random r = new Random();
    private static char[] set = new char[52]; //static because we only need 1 overall
    static { //this is a static "constructor"
        for(int i = 0; i < 26; i++) {
            set[i] = (char)('a'+i);
            set[i+26] = (char)('A'+i);
        }
    }
    
    public char fastRandomLetter() {
        final int randomNumber = this.r.nextInt(52);
        return set[randomNumber];
    }