Конвертировать число с плавающей точкой [] в двойное число [] внутри HashMap - PullRequest
0 голосов
/ 12 января 2011

Я объявил LinkedHashMap<String, float[]> и теперь хочу преобразовать float[] значения в double[][]. Я использую следующий код.

    LinkedHashMap<String, float[]> fData;
    double data[][] = null;

    Iterator<String> iter = fData.keySet().iterator();
    int i = 0;

    while (iter.hasNext()) {

        faName = iter.next();
        tValue = fData.get(faName);
        //data = new double[fData.size()][tValue.length];
        for (int j = 0; j < tValue.length; j++) {
            data[i][j] = tValue[j];
        }
        i++;

    }

Когда я пытаюсь распечатать данные System.out.println(Arrays.deepToString(data));, данные не отображаются: (

Я попытался отладить свой код и понял, что должен инициализировать данные вне цикл while, но я не знаю размеров массива: (

Как это решить?

Спасибо

Ответы [ 4 ]

1 голос
/ 12 января 2011

Я думаю, что проблема в том, что здесь есть два шага, которые вы пытаетесь объединить в один. Во-первых, вы хотите создать массив массивов, достаточно большой, чтобы вместить все отдельные массивы:

double[][] data = new double[fData.size()][];

Далее вам нужно будет выполнить итерации по всем записям, создав массив, достаточно большой, чтобы содержать значение:

double[][] data = new double[fData.size()][];

int index = 0;
for (float[] entry: fData.values()) {
    /* ... */
    ++index;
}

На каждой из этих итераций цикла вы хотите выделить массив для хранения всех чисел:

double[][] data = new double[fData.size()][];

int index = 0;
for (float[] entry: fData.values()) {
    data[index] = new double[entry.length];

    /* ... */

    ++index;
}

И, наконец, вам нужно скопировать данные в:

double[][] data = new double[fData.size()][];

int index = 0;
for (float[] entry: fData.values()) {
    data[index] = new double[entry.length];

    for (int i = 0; i < entry.length; ++i)
        data[index][i] = entry[i];

    ++index;
}

И ты должен быть золотым!

0 голосов
/ 12 января 2011
double data[][] = new data[fData.size()][];

data[i] = new double[tValue.length];
0 голосов
/ 12 января 2011

Попробуйте это:

LinkedHashMap<String, float[]> fData;
double data[][] = new double[fData.size()][];
int i = 0;

for( String key in fData.keys() ) {
    float[] tValue = fData.get(key);
    data[i] = new double[ tValue.length ];
    for (int j = 0; j < tValue.length; j++) {
        data[i][j] = tValue[j];
    }
    i++;
}
0 голосов
/ 12 января 2011

Вам нужно:

double data[][] = new double[fData.size()][];

Затем в цикле вам понадобится:

data[i] = new double[tValue.length];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...