【问题标题】:Filling Array List with random data用随机数据填充数组列表
【发布时间】:2014-08-11 07:58:13
【问题描述】:

我有以下变量和ArrayList

int rowLength, columnLength;
ArrayList<String[]> data = new ArrayList<String[]>();

我需要用随机数据填充这个数组列表。数据必须是字符串(推荐int已转换为String)。主要目标是用随机数据填充多维数组列表。

我已经尝试过这样做,但我遇到了太多麻烦。我是 Java 新手,所以有时我也需要一些基本方面的帮助。

【问题讨论】:

  • 请发布您的代码。
  • 那么你的问题是什么?
  • 我会把答案写给你
  • 请发布您尝试过的以及出了什么问题
  • 我会尝试发布我的代码。问题是我做了太多尝试,所以我需要发布最稳定的版本。这需要一些时间。

标签: java arraylist multidimensional-array


【解决方案1】:

尝试使用 Random 中的 nextInt()。这将创建一个随机 int,您可以将其包装在
Integer.toString(int i) 中。然后将其添加到 String[] 中,然后将其添加到 ArrayList。

例如:

Random r = new Random();
for (int i = 0; i < columnLength; i++) {
    String[] s = new String[rowLength];
    for (int i = 0; i < s.length; i++) {
        s[i] = Integer.toString(r.nextInt());
    {
    data.add(s);
}

【讨论】:

    【解决方案2】:

    使用嵌套的 for 循环,如下所示:

    int rowLength = 10, columnLength = 5; //Initialize sizes
    ArrayList<String[]> data = new ArrayList<String[]>();
    
    for (int row = 0; row<rowLength; row++) {
        String[] stringsColumn = new String[columnLength];
        for (int col = 0; col <columnLength; col++) {
            stringsColumn[col]=Integer.toString(col);
        }
        data.add(stringsColumn);
    }
    

    输出循环

    //Note that this output loop will interchange the columns for rows but it works fine for demonstration
    for (String[] col:data){
        for (String s:col){
            System.out.print("\t"+s);
        }
        System.out.println();
    }
    

    输出

    0   1   2   3   4
    0   1   2   3   4
    0   1   2   3   4
    0   1   2   3   4
    0   1   2   3   4
    0   1   2   3   4
    0   1   2   3   4
    0   1   2   3   4
    0   1   2   3   4
    0   1   2   3   4
    

    【讨论】:

    • 您是否尝试执行此代码?在我看来,这将引发 ArrayIndexOutOfBoundsException:stringsColumn[col]=Integer.toString(col)
    • 我在初始化字符串列时有错字,我已经更正了。您仍然收到错误消息吗?
    • 编译时没问题——这段代码可以编译,没有错别字。执行此代码时出现错误。我试过了。问题是这个stringsColumn[col] - 你尝试访问索引 5,数组长度为 5。因为它抛出 ArrayIndexOutOfBoundsException。
    • 对不起,我不是说拼写错误,我用的是new String[rowLength];,而不是new String[columnLength];。检查您是否在 stringsColumn 数组的长度中使用了正确的变量。
    • 我复制/粘贴了你的代码,它抛出了 ArrayIndexOutOfBoundsException。第 7 行出现逻辑错误:stringsColumn[col]=Integer.toString(col); 此错误的原因在于您的 for 循环,您的索引 col 从 5 开始 - 并且 thah 是数组的长度,但数组中的索引是 0、1、2、3和 4.
    【解决方案3】:

    你可以试试这样的:

    public String generateRandomString(int len) {
        String AB = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        Random rnd = new Random();
        StringBuilder sb = new StringBuilder(len);
        for (int i = 0; i < len; i++)
            sb.append(AB.charAt(rnd.nextInt(AB.length())));
        return sb.toString();
    }
    

    还有这个:

    public Integer generateRandomInteger(int range) {
        Random rnd = new Random();
        Integer val = rnd.nextInt(range);
        return val;
    }
    

    拥有这 2 个函数,您可以向 ArrayList 添加随机数据:

    data.add(generateRandomString(10));
    data.add(generateRandomInteger(200));
    

    【讨论】:

      【解决方案4】:

      有很多很多很多方法可以做到这一点。从我从你的 sn-p 中看到的是,你确实期望这个“多维”“阵列”的一些静态范围:isch thingy。

      int rowLength, columnLength;
      

      然后会暗示两个维度,是这种情况还是您期望更多维度,维度是动态的?如果两个是我猜 String[][] 会做的限制,否则一些更动态的 Map 或 List 构造应该可以工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-23
        • 2011-01-23
        • 2017-06-04
        • 1970-01-01
        • 2013-09-16
        相关资源
        最近更新 更多