Java-эквивалент C # Array.Copy - PullRequest
0 голосов
/ 09 марта 2012

Следующий код работает на C #:

public void DoSomething(float[][] array){
    for (int i = 0; i < array.GetLength(0); i++)
    {
        int len = array[0].length;
        double[] copy = new double[len];
        Array.Copy(array[i], copy, len);

        ...
    }
}

Я пытаюсь преобразовать его в Java.Я попытался это:

public void DoSomething(float[][] array){
    for (int i = 0; i < array[0].length; i++)
    {
        int len = array[0].length;
        double[] copy = new double[len];
        copy = Arrays.copyOf(array[i], len);

        ...
    }
}

Но я получаю сообщение об ошибке:

Несоответствие типов: не может преобразовать из float [] в удвоение []

Что я могу сделать, чтобы это работало на Java?

Ответы [ 3 ]

2 голосов
/ 09 марта 2012

Потому что в Java double и float не одно и то же и имеют разную точность.(См .: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html)

Изменить, чтобы добавить: Что касается того, как заставить это работать, вам нужно сделать это вручную, приведя каждый элемент в double. Однако у вас могут возникнуть проблемы с точностью; см .: Преобразование числа с плавающей запятой в двойное без потери точности

2 голосов
/ 09 марта 2012

Вы пытаетесь присвоить массив float массиву double.Попробуйте это:

public void DoSomething(float[][] array) {
    for (int i = 0; i < array[0].length; i++) {
        int len = array[0].length;
        float[] copy = new float[len];  // note change of array type
        copy = Arrays.copyOf(array[i], len);

Я не могу говорить за C #, но java - это строго типизированный язык, что означает, что вы не можете делать то, что пытались.В то время как в Java float может быть приведен к double, float[] может не быть приведен к double[].

0 голосов
/ 09 марта 2012

Используйте

System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

метод для копирования всех частей вашего массива в другой массив. ( JavaDocs )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...