2013-07-22 5 views
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 
} 

линия отмечена в приведенном выше коде дает мне ошибку Only assignment, call, increment, decrement, and new objects can be used as a statement. Для этого, моя реакция «Не data[0] = {1.0,8.0}; задание?

Я довольно смущен, так что я был бы признателен за любую помощь

+1

вы используете 2 одномерный массив и ваше второе утверждение стало 1 одномерный массив – rajeemcariazo

+0

'новый двойной [] {}' (я полагаю, требуется тип данных) – Sayse

+0

@rajeem_cariazo: Спасибо. Это именно то объяснение, которое мне нужно – inspectorG4dget

ответ

3

Просто замените:

data[0] = {1.0,8.0}; 

по:

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

компилятор должен знать, что явно присвоить data[0]. Он не выводит его из типа data[0].

+0

. Вы действительно можете ввести 'new [] {...}', потому что он * может * вывести тип из содержимого инициализатора. – Servy

+0

Я никогда не делаю этого для чисел, потому что его легко потерять с целыми числами, поплавками, удвоениями и т. Д. И тип выводится не из типа 'data [0]', а из содержимого инициализатора. –

+0

Да, я сказал, что он вывел бы тип, основанный на содержимом массива. Обратите внимание, что если он вывел неверный тип, он не будет компилироваться; если, например, содержимое было типа 'int', и оно сделало его' int [] ', тогда вы получили бы ошибку, присваивая это' double [] ', поэтому код останется ясным в контексте. – Servy

5

Вы хотите сделать

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

The фигурная скобка инициализаторами .., действительны только если вы создаете объект/массив Они не работают сами по себе

вы можете указать тип частности:

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

Но вам не обязательно, если компилятор может вывести правильный тип (что в вашем случае может).

1

Сначала вы должны инициализировать свой подмассива.

double[][] data = new double[2][]; 
data[0] = new double[] {1.0f, 8.0f}; 
Смежные вопросы