【问题标题】:How can I fix a type mismatch error of ArrayList type? Possible Multidimensional Array?如何修复 ArrayList 类型的类型不匹配错误?可能的多维数组?
【发布时间】:2016-01-05 00:31:47
【问题描述】:

所以我一直在尝试在课堂上编写静态方法来练习我学到的东西。我对泛型类型和 ArrayLists 的理解仍然是空的,这就是为什么我在这里问的原因,因为故障排除非常可怕(我目前正在阅读 Java Core 9th edition 第一本书直到第 6 章)。

该方法应该接受任意数量的双精度数组(创建一个多维数组),并检查每个单独的双精度数组是否包含少于或多于三个双精度元素,然后对这些数组执行操作等。 .. 如果数组包含少于两个双精度元素,则显示错误并退出。如果超过 3 个,则创建该数组的 Arraylist 并删除任何超出的元素。

当我尝试在我的多维数组“DDs”的每个循环中创建数组“d”的 ArrayList 时,我的问题就出现了。我从this 问题中接受了所有建议,但都没有奏效,我尝试了其他网站的其他一些建议,但同样没有奏效。这是我的代码的 sn-p。

public static final void Calcs(double[]... DDs)
{
    for(double[] d : DDs)
    {
        if(d.length < 3)
        {
            System.out.println("Variable Error 1 :: Array Distributed exceeds 3 types");
            System.exit(0);
        }else if(d.length > 3)
        {
            ArrayList<Double> tmp = new ArrayList<>(Arrays.asList(d));
            //Type mismatch: cannot convert from ArrayList<double[]> to ArrayList<Double>
        }
    }

}

我的假设是数组 d 被另一个数组包围。但我不确定,而是问一个这样做的人:

我认为 x 应该是什么样子:

d = [x]

我认为它可能是什么样子:

d = [[x]]

有任何疑难解答的想法吗?我对泛型类型很陌生,这个错误并没有告诉我太多。非常感谢您的反馈。

【问题讨论】:

  • 您是否尝试将“double[]”都更改为“Double[]”?
  • 我有,而且它有效,我不知道数组被认为是一个对象。问题已解决,非常感谢

标签: java arrays arraylist multidimensional-array


【解决方案1】:

这里有两个选择。您可以将您的二维数组(因为 varargs 实际上是一个数组)视为 Listdouble[]ListList&lt;Double&gt;

第一种方法是

List<double[]> list = new ArrayList<>(Arrays.asList(DDs)); //Arrays.asList() returns a fixed size list so we'll put it into a flexible list

第二种方法是

List<List<Double>> list = new ArrayList<>();
for (double[] doubles : DDs) {
    List<Double> listDoubles = new ArrayList<>(); //Cannot use Arrays.asList() because that will return List<double[]> with a single element
    for (double innerDouble : doubles) {
        listDoubles.add(innerDouble);
    }
    list.add(listDoubles);
}

【讨论】:

  • List 和 ArrayList 有什么区别?另外第二种方法对我来说很好,因为我可以在第二个 for 循环中编辑 listDoubles 的内容,这本来就是我想要的。
  • List 是接口。 ArrayList 是实现。你应该在接口上编程
【解决方案2】:

这可以编译,但我不确定它是否是您所寻求的:

public static final void Calcs ( double[]... DDs ) {
    for ( double[] d : DDs ) {
        if ( d.length < 3 ) {
            System.out.println("Less than 3");
            System.exit(0);
        }
        ArrayList<double[]> tmp = new ArrayList<>(Arrays.asList(d));
    }
}

也许是这样,那么:

public static final void Calcs ( double[]... DDs ) {
    for (double[] d : DDs ) {
        if (d.length < 3) {
            System.out.println("Less than 3");
            System.exit(0);
        }
        ArrayList<Double> tmp = new ArrayList<>(d.length);
        for ( double od : d ) tmp.add(od);
    }
}

【讨论】:

  • 不完全不,我正在寻找双数组而不是双多维数组。而且我不确定它为什么会编译,这可能是由于我查看每个循环的错误方式,但非常感谢,希望有人能澄清这一点:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多