初始化数组的数组

3

我正在尝试创建一些测试数据,以测试我的代码的功能。为此,我需要一个double[][]。我正在尝试使用一个函数,该函数将double [][]作为输入参数,并将包含测试数据的本地变量复制到它上面。然而,我得到了一个错误,我不太理解(我确信这是一个非常基本的错误,这就是为什么我无法在谷歌上找到答案),所以我需要任何帮助来理解/修复它。

private void makeData(double[][] patterns)
{
    double[][] data = new double[2][];
    // exists so that I can change `data` easily, without having to change the core functionality of copying it over to `patterns`
    data[0] = {1.0,8.0}; // error!
    // copy over everything from data into patterns
}

上面代码中标记的那一行给我报了一个错误:“只有赋值、调用、增量、减量和新对象可以用作语句”。对此,我的反应是“data [0] = {1.0,8.0};不是赋值吗?”
我很困惑,所以希望得到任何帮助。

1
你正在使用一个二维数组,但是你的第二个语句变成了一个一维数组。 - rajeemcariazo
new double[]{}(我假设需要数据类型) - Sayse
@rajeem_cariazo:谢谢。这正是我需要的解释。 - inspectorG4dget
3个回答

5
你想要做什么。
data[0] = new[] {1.0, 8.0};

花括号初始化器只在创建对象/数组时有效,它们不能单独使用。
您可以明确指定类型:
data[0] = new double[] {1.0, 8.0};

但如果编译器可以推断出正确的类型(在您的情况下,它可以),则您不必这样做。


3

只需要替换:

data[0] = {1.0,8.0};

由:

data[0] = new double[] { 1.0, 8.0 };

编译器需要明确知道要为data[0]分配什么内容,它无法从data[0]的类型中推断出来。

你实际上可以输入 new[] {...} 因为它可以从初始化器的内容中推断出类型。 - Servy
我从来不对数字这么做,因为在整数、浮点数、双精度等方面很容易迷失。而类型是被推断出来的,不是从data[0]的类型中推断出来的,而是从初始值的内容中推断出来的。 - Cédric Bignon
是的,我说过它会根据数组的内容推断类型。请注意,如果它推断的类型错误,则无法编译;例如,如果内容是int类型,但它将其推断为int[],那么将其分配给double[]时将出现错误,因此代码在上下文中仍然清晰明了。 - Servy

1

你应该先初始化你的子数组。

double[][] data = new double[2][];
data[0] = new double[] {1.0f, 8.0f};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接