【问题标题】:incompatible types: int[] cannot be converted to java.util.List<java.lang.Integer>不兼容的类型:int[] 无法转换为 java.util.List<java.lang.Integer>
【发布时间】:2017-03-18 17:55:39
【问题描述】:

我有一个生成随机数组的函数:

  private static List<Integer> randomIntegerArray(int n) {
    int[] array = new int[n];
    for(int i = 0; i <  array.length; i++) {
      array[i] = (int)Math.random();
    }
    return array;
  }

我收到以下错误:

不兼容的类型:int[] 无法转换为 java.util.List

我不确定这里的问题是什么。这是一段非常简单的代码,我似乎无法开始工作。

【问题讨论】:

  • A List 不是数组。如果你想返回一个int数组,你的返回类型需要是int[]
  • @khelwood 那么如何初始化/附加List&lt;Integer&gt;
  • 它告诉你类型不能自动转换。您必须创建要返回的类型。
  • 注意:(int)Math.random() 始终是 0
  • 我可以说错误消息本身包含一个答案。

标签: java arrays list


【解决方案1】:

您正在返回List&lt;Integer&gt;,但您正在创建一个int[]。它们是完全不同的东西!试试这个:

  private static List<Integer> randomIntegerArray(int n) {
    List<Integer> list = new ArrayList<>();
    for(int i = 0; i < n; i++) {
      list.add((int) Math.random()); // always returns 0
    }
    return list;
  }

或者如果你确定要使用数组,改变方法的声明:

private static int[] randomIntegerArray(int n)

请注意Math.random() 返回的值介于01 之间,如果将其转换为int,它将始终0

【讨论】:

    【解决方案2】:

    奥斯卡答案的替代方案是:

    private static int[] randomIntegerArray(int n) {
        int[] array = new int[n];
        for(int i = 0; i < array.length; i++) {
            array[i] = (int)Math.random();
        }
        return array;
    }
    

    正如其他人所说,Integer 类型的 Listint 类型的数组不同。

    【讨论】:

      【解决方案3】:

      这可能不是最佳选择,但也有效,尽管正如 Peter Lawrey 所说,您总是会得到一个零整数列表:

      private static List<Integer> randomIntegerArray(int n) {
          Integer[] array = new Integer[n];
      
          for(int i = 0; i <  array.length; i++) {
              array[i] = Double.valueOf(Math.random()).intValue();
          }
          return Arrays.asList(array);
      }
      

      【讨论】:

        【解决方案4】:

        通过直接使用Random 类,您可以获得更简单的代码,它实际上生成随机整数而不是零:

        private static List<Integer> randomIntegerArray(int n) {
          return ThreadLocalRandom.current().ints(n).boxed().collect(Collectors.toList());
        }
        

        这可能返回任何Integer 值;您可以为 ints() method. 指定带有附加参数的范围

        【讨论】:

          【解决方案5】:

          您的错误告诉您数组和列表不兼容,快速搜索会向您展示将一个转换为另一个的方法,如 Arrays.asList ()。 其次 Math.random 返回一个介于 0.0 和 0.9 之间的随机数,因此您需要乘以所需的数字。 您可能需要先阅读有关 Java 的快速教程。 一切顺利。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-10-22
            • 2017-10-03
            • 2017-03-29
            • 1970-01-01
            • 1970-01-01
            • 2018-07-03
            • 2018-05-28
            • 2017-03-27
            相关资源
            最近更新 更多