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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Возвращение целого из метода через параметр 
:(
    Опции темы
_Владимир_
Дата 17.11.2011, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте, Все!

Подскажите как вернуть параметр из метода? Например, так:

Код


class Divider
{
  public int Div(int numerator, int denominator, ref int remainder)
  {
     remainder=numerator%denominator;
     return numerator/denominator;
  }
}

class ZZZ
{
   public void SuperMethod()
   {
      int A=10;//Делимое
      int B=3;//Делитель
      int C;//Остаток

      Divider divider=new Divider();
      int C=divider.Div(A, B, C);
      ...
   }
}


Хочу возвращать именно через параметр и именно целое. Возвращать классы не предлагать smile 

Почему-то так не работает:
Код

public int Div(int numerator, int denominator, Integer remainder)


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


Эксперт
***


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

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



ref и out в джаве не работают - все параметры передаются по значению.


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


Эксперт
****


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

Репутация: 8
Всего: 72



Код

class Divider
{
  public int div(int numerator, int denominator, int[] remainder)
  {
     if (remainder != null && remainder.length >= 1)
       remainder[0]=numerator%denominator;
     return numerator/denominator;
  }
}
class ZZZ
{
   public void SuperMethod()
   {
      int A=10;//Делимое
      int B=3;//Делитель
      int C;//Частное
      int R; //Остаток
      {
        Divider divider=new Divider();
        int[] rem = new int[1];
        C=divider.div(A, B, rem);
        R = rem[0]; //Остаток
      }
      ...
   }
}

лучшего не придумать, если не хочешь классы или интерфейсы.

Добавлено через 3 минуты и 48 секунд
PS: Integer не даботает потму, что это неизменяемый объект, как и String. Можешь сделять свой класс MyInteger, значение которого можно менять - но int[1] его полный эквивалент.
PM   Вверх
_Владимир_
Дата 17.11.2011, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

PS: Integer не даботает потму, что это неизменяемый объект, как и String. Можешь сделять свой класс MyInteger, значение которого можно менять - но int[1] его полный эквивалент. 

Отлично - это и есть решение:
Код

int Div(int A, int B, int [] C){ ... }

Спасибо!

PM MAIL   Вверх
Stolzen
Дата 17.11.2011, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(_Владимир_ @  17.11.2011,  14:41 Найти цитируемый пост)
Отлично - это и есть решение:
int Div(int A, int B, int [] C){ ... }
Спасибо!


Это, может быть, и есть решение, однако я бы не рекомендовал так делать.
Сейчас работаю с кодом, в котором таким образом возвращаются данные - все очень неочевидно и запутанно. Сделайте лучше класс.

Это сообщение отредактировал(а) Stolzen - 17.11.2011, 17:50


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


Эксперт
****


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

Репутация: 8
Всего: 72



Цитата(Stolzen @  17.11.2011,  15:14 Найти цитируемый пост)
Это, может быть и есть решение, однако я бы не рекомендовал так делать.Сейчас работаю с кодом, в котором таким образом возвращаются данные - все очень неочевидно и запутанно. Сделайте лучше класс.

Я то же - кроме случая, когда програмируется маленький апплет и хочется чтобы всё было в одном классе, чтобы не создавать jar.
Но вместо класса лучше создать интерфейс:
Код

interface Remainder {
int getRemainder();
void setRemainder(int rem);
}
class Divider
{
  public int div(int numerator, int denominator, Remainder remainder)
  {
     if (remainder != null)
       remainder.setRemainder(numerator%denominator);
     return numerator/denominator;
  }
}
class ZZZ implements Remainder
{
   private int remainder;
   public int getRemainder() { return remainder; }
   public void setRemainder(int rem) { remainder = rem; }
   public void SuperMethod()
   {
      int A=10;//Делимое
      int B=3;//Делитель
      int C;//Частное
      int R; //Остаток
      Divider divider=new Divider();
      C=divider.div(A, B, this);
      R = getRemainder(); //Остаток
      ...
   }
}

ещё вариант:
Код

interface Remainder {
int getRemainder();
void setRemainder(int rem);
}
class Divider implements Remainder
{
  private int remainder;
  public int getRemainder() { return remainder; }
  public void setRemainder(int rem) { remainder = rem; }
  public int div(int numerator, int denominator, Remainder remainder = null)
  {
     if (remainder == null) rmainder = this;
     remainder.setRemainder(numerator%denominator);
     return numerator/denominator;
  }
}
class ZZZ
{
   public void SuperMethod()
   {
      int A=10;//Делимое
      int B=3;//Делитель
      int C;//Частное
      int R; //Остаток
      Divider divider=new Divider();
      C = divider.div(A, B);
      R = divider.getRemainder(); //Остаток
      ...
   }
}


PM   Вверх
Stolzen
Дата 17.11.2011, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Почему бы не сделать так? 

Код

  public int div(int numerator, int denominator)
  {
     return numerator / denominator;
  }

  public int mod(int numerator, int denominator)
  {
     return numerator % denominator;
  }



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


Эксперт
****


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

Репутация: 8
Всего: 72



Цитата(Stolzen @  17.11.2011,  17:44 Найти цитируемый пост)
Почему бы не сделать так?

полагаю, это просто пример. Реальный случай где ТС хочет вернуть значение через параметр, сложнее, и полагаю, не разлагается на несколько более простых вычислений, которые можно вызвать отдельно. Если это так, то действительно, стоит разделить, чтобы возвращался один результат - при использовании функций с побочным эффектом часто этот побочный эффект забывается.

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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