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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с кодом 
:(
    Опции темы
tishaishii
Дата 15.2.2007, 08:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


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

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



Вобщем, дали мне такое задание:
Цитата
На JAVA. Желательно в JCreator.
Создать тип Date (дата), включающий члены-данные day, month, year и функции-члены. Определить статические член-данные Default_day, определяющий дату по умолчанию. Также задать несколько конструкторов Date(int, int, int), Date (int, int), Date(int), Date(). Определить функцию член Set_default (int, int, int), формирующую значение даты по умолчанию. Сформировать const функции-члены: Day(), Month(), Year(), выделяющие день, месяц и год для заданной даты. Определить вспомогательную функцию leapyear(int), определяющую, является ли год високосным. Задать функцию, осуществляющую вывод даты в удобном формате. Определите функции add_day(int), add_month(int), add_year(int), позволяющие увеличить заданную дату на соответствующее число дней, месяцев, лет.
Перегрузить операторы: ==, !=, <, > (сравнение дат на равенство, неравенство, меньше и больше); ++, -- (увеличение, уменьшение заданной даты на 1 день);  +,- (увеличение, уменьшение даты на заданное количество дней.)
Определите функцию main(), демонстрирующую применение заданных функций.


Я его как бы выполнил в Sun ONE Studio 5:
Код

public class Z2 {
    private int day, month, year;
    private final static int MONTHS[]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    public void Z2(int d, int m, int y) {
        day=d;
        month=m;
        year=y;
    }
    public final static void main(String[] args) {
        System.out.println(Day());
    }
    public final int Day() {return day;}
    public final int Month() {return month;}
    public final int Year() {return year;}

    public final boolean leapyear() {return (year % 4)!=0;}
    public final String toString() {
        return String.valueOf(day)+'.'+String.valueOf(month)+'.'+String.valueOf(year);
    }
    public final int addDay(int add) {
        day+=add;
    while(day>MONTHS[month]) {
            day-=MONTHS[month];
            addMonth(1);
    }
    return day;
    }
    public final int addMonth(int add) {
        month+=add;
    while(month>MONTHS.length) {
            month-=MONTHS.length;
            addYear(1);
    }
    return month;
    }
    public final int addYear(int add) {return year+=add;}
}


Вопросы:
1. При компиляции получаю ошибку 
Цитата
Z2.java [10:1] non-static method Day() cannot be referenced from a static context
        System.out.println(Day());
                           ^
1 error
Errors compiling Z2.

2. Странное задание, вроде, в Java нет перегрузки операторов.
PM MAIL ICQ Skype   Вверх
Ivan Kolesnikov
Дата 15.2.2007, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 9.3.2005
Где: г. Новокузнецк

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



Цитата

1. При компиляции получаю ошибку 

Ошибку ты получаешь потому что пытаешься вызвать нестатическую функцию из статической, ведь ты в main не создал даты, а пытаешься получить ее день smile
Код

Z2 date = new Z2(15, 2, 2007);
System.out.println(date.Day());

Цитата

2. Странное задание, вроде, в Java нет перегрузки операторов. 

Да, в Java нет перегрузки операторов.
--------------------
PM MAIL ICQ   Вверх
powerOn
Дата 15.2.2007, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Модератор: Название темы должно отражать ее суть!
Правила форума: http://forum.vingrad.ru/index.php?act=SR&f=27


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

PM MAIL   Вверх
tishaishii
Дата 15.2.2007, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


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

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



Ну надо её переименовать в "Помогите разобраться с синтаксисом", только я не умею.

Добавлено @ 12:55 
Я поменял:
Код

public class Z2 {
    private int day, month, year;
    private final static int MONTHS[]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    public void Z2(int d, int m, int y) {
        day=d;
        month=m;
        year=y;
    }
    public final static void main(String[] args) {
        Z2 d1=new Z2(28, 5, 2005);
        System.out.println(Z2.cmpDate(this));
    }
    public final int Day() {return day;}
    public final int Month() {return month;}
    public final int Year() {return year;}

    public final boolean leapyear() {return (year % 4)!=0;}
    public final String asString() {
        return String.valueOf(day)+'.'+String.valueOf(month)+'.'+String.valueOf(year);
    }
    public final int cmpDate(Z2 d1) {
        return (d1.year==this.year && d1.month==this.month && d1.day==this.day)?0:
                (d1.year>this.year && d1.month>this.month && d1.day>this.day)?1:-1;
    }
    public final int addDay(int add) {
        day+=add;
    while(day>MONTHS[month]) {
            day-=MONTHS[month];
            addMonth(1);
    }
    return day;
    }
    public final int addMonth(int add) {
        month+=add;
    while(month>MONTHS.length) {
            month-=MONTHS.length;
            addYear(1);
    }
    return month;
    }
    public final int addYear(int add) {return year+=add;}
}



Теперь при компиляции выдаёт:
Код
Z2.java [10:1] cannot resolve symbol
symbol  : constructor Z2 (int,int,int)
location: class Z2
        Z2 d1=new Z2(28, 5, 2005);
              ^
Z2.java [11:1] non-static variable this cannot be referenced from a static context
        System.out.println(Z2.cmpDate(this));
                                      ^
Z2.java [11:1] non-static method cmpDate(Z2) cannot be referenced from a static context
        System.out.println(Z2.cmpDate(this));
                             ^
3 errors
Errors compiling Z2.


Добавлено @ 12:56 
Какой символ он не может разрешить в 
Код
Z2 d1=new Z2(28, 5, 2005);
?
PM MAIL ICQ Skype   Вверх
LSD
Дата 15.2.2007, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Код
class Z2
{
  private final static int MONTHS[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

  private int day, month, year;

  public Z2(int d, int m, int y)
  {
    day = d;
    month = m;
    year = y;
  }

  public static void main(String[] args)
  {
    Z2 d1 = new Z2(28, 5, 2005);
    Z2 d2 = new Z2(15, 2, 2007);
    System.out.println(d1.cmpDate(d2));
  }

  public final int Day()
  {
    return day;
  }

  public final int Month()
  {
    return month;
  }

  public final int Year()
  {
    return year;
  }

  public final boolean leapyear()
  {
    return (year % 4) != 0;
  }

  public final String asString()
  {
    return String.valueOf(day) + '.' + String.valueOf(month) + '.' + String.valueOf(year);
  }

  public final int cmpDate(Z2 d1)
  {
    return (d1.year == this.year && d1.month == this.month && d1.day == this.day) ? 0 :
           (d1.year > this.year && d1.month > this.month && d1.day > this.day) ? 1 : -1;
  }

  public final int addDay(int add)
  {
    day += add;
    while(day > MONTHS[month])
    {
      day -= MONTHS[month];
      addMonth(1);
    }
    return day;
  }

  public final int addMonth(int add)
  {
    month += add;
    while(month > MONTHS.length)
    {
      month -= MONTHS.length;
      addYear(1);
    }
    return month;
  }

  public final int addYear(int add)
  {
    return year += add;
  }
}



--------------------
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   Вверх
Ivan Kolesnikov
Дата 15.2.2007, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 9.3.2005
Где: г. Новокузнецк

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



Во 1-х у тебя неправильно описан конструктор класса, надо:
Код

public Z2(int d, int m, int y) {
    day=d;
    month=m;
    year=y;
}


Кодом:
Код

Z2.cmpDate(this)

Ты вызываешь метод класса(статик) cmpDate, а тебе нужно вызвать метод объекта для того чтобы сравнить его с другим объектом. И ты не имеешь в статическом методе ссылке на объект (ее просто не существует), поэтому в статических методах нельзя использовать this.

Например сравнить можно так:
Код

public final static void main(String[] args) {
    Z2 d1=new Z2(28, 5, 2005);
    Z2 d2=new Z2(28, 1, 2005);
    System.out.println(d1.cmpDate(d2));
}


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

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

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


 




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


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

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