【问题标题】:Converting array list to a string array将数组列表转换为字符串数组
【发布时间】:2021-08-31 12:36:19
【问题描述】:

我一直在尝试将我的字符串数组列表转换为字符串数组,以便我可以打印它,但无法这样做。

这是我的类,randomQuestion,它从同一个类中的 gameQuestions 方法中获取一个数组列表。

我之前从未尝试过使用循环转换数组列表,因此很困难,我可以用代码很好地转换它

String[] questions = data1.toArray(new String[]{});

但我需要它循环使用 for 循环将其存储在一个数组中,然后一旦成功回答问题,我就可以一次打印一个。

我从 netbeans 收到的错误是找不到符号 Symbol:methodtoArray(String[]) 用于下面的 .toArray 部分。

public String[] randomQuestion(ArrayList data1) {
    Collections.shuffle(data1);
    for (int question = 0; question < 10; question++) {
        ranquestions = data1.get(question).toArray(new String[10]);
    }
    return ranquestions;
}

任何帮助将不胜感激。

【问题讨论】:

  • 你真的在使用raw type as a parameter (ArrayList data1)吗?我建议不要这样做,而是通过泛型指定 ArrayList 包含的对象类型,这将使​​转换等之后的任何事情都变得容易得多。
  • 问题是我们目前甚至不知道您的arraylist包含哪些数据类型,因此我们无法告诉您如何将它们转换为任何内容。
  • 这是一个字符串数组列表,用于从文本文件中扫描文本(测验问题)。
  • 没错,如果是ArrayList&lt;String&gt;,您可以使用您选择的分隔符将String.join 转换为单个String

标签: java arrays arraylist


【解决方案1】:

您可以使用List.toArray()List 类有一个方法:

<T> T[] toArray(T[] a);

【讨论】:

    【解决方案2】:

    假设您有一个ArrayList&lt;String&gt;,您可以使用String.join(delimiter, wordList) 将所有元素连接到一个String

    public static void main(String[] args) {
        // example list
        List<String> words = new ArrayList<String>();
        words.add("You");
        words.add("can");
        words.add("concatenate");
        words.add("these");
        words.add("Strings");
        words.add("in");
        words.add("one");
        words.add("line");
        // concatenate the elements delimited by a whitespace
        String sentence = String.join(" ", words);
        // print the result
        System.out.println(sentence);
    }
    

    这个例子的结果是

    You can concatenate these Strings in one line
    

    因此,使用您的列表,String.join(" ", data1) 将创建一个 String,其中 data1 的元素由空格分隔。

    【讨论】:

    • 它是一个数组列表字符串。我可以扫描文本文件中的问题。扫描它们后我想做的是用 collections.shuffle 随机化每条扫描线的顺序。 Collections.shuffle 是我发现的一种解决方案,可以随机化我已扫描到数组列表中的问题的顺序。
    • 很抱歉给您带来了困惑。它的目的是在将随机问题存储在数组中后打印它,但是“ranquestions = data1.get(question).toArray(new String[10]);”不允许我将问题存储在字符串数组中。
    • 好吧,从你的问题中无法猜到这一点,抱歉...
    • 我想我可能只是将数组列表改组以随机化。有没有另一种方法可以用来随机化一个数组并生成以前没有被问过的唯一数组(问题)?
    • 这带来了另一方面...一。如果之前创建过则丢弃并重新生成,否则使用并存储它。
    【解决方案3】:

    如果我理解正确的话,问题是如何创建一个只有 10 个列表元素的数组。

    流(Java 8):

    String[] ranquestions = data1.stream()
                                 .limit(10)
                                 .toArray(String[]::new);
    

    循环(基于问题,避免不必要的变化):

    String[] ranquestions = new String[10];
    for(int question = 0; question < 10; question++) {
        ranquestions[question] = data1.get(question);
    }
    

    总是假设List&lt;String&gt; data1,如果不是需要一些转换。
    示例:

    String[] ranquestions = data1.stream()
                                 .limit(10)
                                 .map(String::valueOf)
                                 .toArray(String[]::new);
    

    或者,循环案例:

        ranquestions[question] = String.valueOf(data1.get(question));
    

    【讨论】:

      【解决方案4】:

      你可以这样做:

      private String[] randomQuestions(ArrayList data){
          Collections.shuffle(data);
          return (String[]) data.toArray();
      }
      

      如果你确定你得到一个字符串(问题)列表,你可以改为

      private String[] randomQuestions(List<String> data){
          Collections.shuffle(data);
          return (String[]) data.toArray();
      }
      

      编辑 1

      private static String[] randomQuestions(ArrayList data){
          Collections.shuffle(data);
          String[] randomQuestions = new String[data.size()];
          for(int i=0; i<data.size(); i++){
              randomQuestions[i] = String.valueOf(data.get(i));
          }
          return randomQuestions;
      }
      

      【讨论】:

      • 我想我可能只是将数组列表改组以随机化。有没有另一种方法可以用来随机化一个数组并生成以前没有被问过的唯一数组(问题)?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-14
      • 2013-01-29
      相关资源
      最近更新 更多