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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> String'овое представление части объекта (вопрос), Как отобразить только некоторые элементы 
:(
    Опции темы
BlHol
Дата 25.1.2007, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Добрый день!

Исходные данные.
Есть класс, создающий точку на плоскости с координатами x,y.

В том же классе, хочу добавить метод переводящий декартовы координаты в полярные. Причем, нужно чтобы перевод обеих координат был в пределах одного метода и полярные координаты возвращались из метода в виде объекта (чтоб обе сразу, а не на каждую по методу:

Код

public class myPoint
{

............................
  public myPoint coordPol()
    {
      myPoint coords = new myPoint(x,y);

      rad = Math.sqrt(x*x+y*y);
      phi = .........;

      return coords;

    }

public String toString()

{
return Double.toString(x) + "  " + y + "  " + rad+ "  " + phi;
}

private double x;
private double y;

private double rad;
private double phi;


}


Проблема в строковом представлении.
При указанной выше перегрузке toString(), при вызове данного класса выдаются все четыре координаты. А мне нужно, чтобы выводились только те пары координат, которые требуются.
Если в toString() указывать только x и y, то rad и phi вообще не выдаются. Вторая перегрузка toString() не получается.

Вобщем, что делать?

Заранее благодарен.
С уважением

PM MAIL   Вверх
Alagert
Дата 25.1.2007, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Как то пространно ты объясняешь smile Скажи точно какие координаты ты хочешь чтобы выводились: только декартовы, только полярные или то и др.
Ща у тебя явно написан вывод и декартовых и полярных. Так что не удивляйся, что выводится их 4 штуки.
--------------------
[color=blue]BORN TO BE ROOT#[/color]  
PM MAIL ICQ   Вверх
powerOn
Дата 25.1.2007, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



добавь к примеру флаг, значение которого будет идентифицировать в каком виде возвращать координаты. В методе toString() проверяй состояние флага и в зависимости он него делай возврат. Либо полярные, либо декартовые.

Код

boolean flag = false;
public String toString()
{
        String ret;
        if (flag) {
          ret = "" +  x + "  " + y;
        } else {
          ret = "" + rad + "  " + phi;
        }
        return ret;
}


Это сообщение отредактировал(а) powerOn - 25.1.2007, 10:59


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
BlackStar
Дата 25.1.2007, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А почему бы не создать отдельный метод для каждого представления (eg. getPolarStr())  ?
А если уж есть необходимость в toString() то тогда добавить флаг и метод который его выставляет в класс и в зависимости от флага возвращать нужное представление.

UPD: Oops! Мои мысли уже прочитаны powerOn  smile 

Это сообщение отредактировал(а) BlackStar - 25.1.2007, 11:05
PM MAIL Jabber   Вверх
LSD
Дата 25.1.2007, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(BlHol @  25.1.2007,  10:52 Найти цитируемый пост)
Вобщем, что делать?

Метод toString() предназначен для отладки (запись в логи и т.п.), и должен выдавать максимально полную информацию об объекте. 
А для отображения пользователю создан класс Format.
Код
import java.text.*;

public class PointFormat extends Format
{
  private String format;

  public PointFormat(String format)
  {
    this.format = format;
  }

  public StringBuffer format(Object obj, StringBuffer toAppendTo, FieldPosition pos)
  {
    return format((Point) obj, toAppendTo, pos);
  }

  public StringBuffer format(Point point, StringBuffer toAppendTo, FieldPosition pos)
  {
    String result = format.replaceAll("X", Double.toString(point.getX()));
    result = result.replaceAll("Y", Double.toString(point.getY()));
    result = result.replaceAll("PHI", Double.toString(point.getPhi()));
    result = result.replaceAll("RAD", Double.toString(point.getRad()));
    toAppendTo.append(result);
    pos.setEndIndex(result.length() + pos.getBeginIndex());
    return toAppendTo;
  }

  public Object parseObject(String source, ParsePosition pos)
  {
    throw new UnsupportedOperationException("Method not implemented");
  }

  public static void main(String[] args)
  {
    PointFormat format = new PointFormat("Point[X, Y]");
    Point point = new Point(1, 2, 3, 4);
    System.out.println(format.format(point));
    format = new PointFormat("Point[PHI, RAD]");
    System.out.println(format.format(point));
  }
}

class Point
{
  private double x, y, rad, phi;

  public Point(double x, double y, double rad, double phi)
  {
    this.x = x;
    this.y = y;
    this.rad = rad;
    this.phi = phi;
  }

  public double getX()
  {
    return x;
  }

  public void setX(double x)
  {
    this.x = x;
  }

  public double getY()
  {
    return y;
  }

  public void setY(double y)
  {
    this.y = y;
  }

  public double getRad()
  {
    return rad;
  }

  public void setRad(double rad)
  {
    this.rad = rad;
  }

  public double getPhi()
  {
    return phi;
  }

  public void setPhi(double phi)
  {
    this.phi = phi;
  }
}



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
BlHol
Дата 25.1.2007, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



С флагом идею уже думал. Но хочу туда добавить еще методы для перевода декартовых координат в сферические и цилиндрические. Тогда, как флаг использовать?
PM MAIL   Вверх
LSD
Дата 25.1.2007, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Ну или реализовать интефейс Formattable из JDK 1.5 и печетать через printf().


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
BlackStar
Дата 25.1.2007, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

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


Подсказка: флаг не обязательно должен иметь тип boolean.

Это сообщение отредактировал(а) BlackStar - 25.1.2007, 12:12
PM MAIL Jabber   Вверх
BlHol
Дата 25.1.2007, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



С флагом все замечательно. А если нужно вывести, в том числе, и все четыре координаты. Потом там еще и сферические с цилиндрическими появятся. Их тоже нужно будет выводить либо по-отдельности (попарно), либо в сочетании с другими. Как, в данном случае, быть?
PM MAIL   Вверх
LSD
Дата 25.1.2007, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(BlHol @  25.1.2007,  13:26 Найти цитируемый пост)
С флагом все замечательно. А если нужно вывести, в том числе, и все четыре координаты. Потом там еще и сферические с цилиндрическими появятся. Их тоже нужно будет выводить либо по-отдельности (попарно), либо в сочетании с другими. Как, в данном случае, быть?

Используй форматер.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Shurr
Дата 26.1.2007, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(BlHol @ 25.1.2007,  12:26)
С флагом все замечательно. А если нужно вывести, в том числе, и все четыре координаты. Потом там еще и сферические с цилиндрическими появятся. Их тоже нужно будет выводить либо по-отдельности (попарно), либо в сочетании с другими. Как, в данном случае, быть?

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

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

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


 




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


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

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