Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вернуть double[] побочным эффектом. 
V
    Опции темы
arcsupport
Дата 28.12.2011, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 24.10.2008

Репутация: 1
Всего: 2



Как в процедуре с помощью побочного эффекта вернуть массив double[].
У меня почему-то возвращаются одни NaN.
PM MAIL   Вверх
jk1
Дата 28.12.2011, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 40
Всего: 75



О какой процедуре речь? Приведите пожалуйста код.


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
MaxPayneC
Дата 28.12.2011, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 18.2.2006

Репутация: 5
Всего: 9



А мне интересно, о каком побочном эффекте речь.
PM   Вверх
arcsupport
Дата 28.12.2011, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 24.10.2008

Репутация: 1
Всего: 2



Ну, например, вот так для proc2:
Код
private double[] proc1() {
    double[] mas = new double [100];
    ...
    return mas;
}

private void proc2(double[] p) {
    ...
    p = proc1();
}


Это сообщение отредактировал(а) arcsupport - 28.12.2011, 17:50
PM MAIL   Вверх
_Y_
Дата 28.12.2011, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 5
Всего: 34



Как понимаю, нужно чтобы по формальному аргументу метода proc2 возвращался новый массив? 

Или я чего-то недополупонимаю, либо вот так напрямую это невозможно. Ведь массив это объект, а объекты передаются по ссылке. При вызове proc2(double[]p) Вы передаете в метод именно ссылку на объект, т.е. на его адрес. В методе же модифицируете не объект, а адрес. А поскольку адрес это не объект, то обратно он и не передается, т.к. по ссылке передаются только объекты.

Я бы просто упаковал все в простенький класс:

Код

class DblArray {
   public double[] p;
}


И вызов осуществлял бы таким образом:
Код

DblArray da = new DblArray (); 
proc2(da);
......


а сам метод переписал бы так:

Код

private void proc2(DblArray d) {
    ...
    d.p = proc1();
}



--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
arcsupport
Дата 28.12.2011, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 24.10.2008

Репутация: 1
Всего: 2



А можно ли это сделать с использованием System.arraycopy?

Это сообщение отредактировал(а) arcsupport - 28.12.2011, 18:24
PM MAIL   Вверх
Stolzen
Дата 28.12.2011, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 23
Всего: 48



Ага, можно

Код

    public static void main(String[] args) {
        double[] array = new double[] { 10, 11 };
        proc1(array);
        System.out.println(Arrays.toString(array));
    }

    public static void proc1(double[] p) {
        double[] array = new double[] { 13, 14 };
        System.arraycopy(array, 0, p, 0, p.length);
    }


[13.0, 14.0]



--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
arcsupport
Дата 28.12.2011, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 24.10.2008

Репутация: 1
Всего: 2



Спасибо.
PM MAIL   Вверх
_Y_
Дата 29.12.2011, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 5
Всего: 34



System.arraycopy вам годится только в том  случае, если программа всегда работает с массивами одинаковой длины.

В противном случае либо получите комбинацию из элементов нового и старого массивов, либо ошибку ArrayIndexOutOfBoundsException


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0736 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.