Помощь со структурой объектов Java

Мне нужно написать класс, инкапсулирующий курс. Предполагается, что курс имеет три атрибута: кодовое название, описание и количество кредитов. Я должен включить конструктор, средства доступа и мутаторы, а также методы toString и equals.

В рамках этого задания я должен написать клиентский класс для проверки всех методов класса Course. Я считаю, что я закончил курс курса, но у меня возникли проблемы с написанием клиента. Для всего, что я пытаюсь, я получаю сообщение об ошибке «Нестатическая переменная, на которую нельзя ссылаться из статического контекста». Что я делаю не так?

Хорошо, я переписал свой код. Я все еще не знаю, как заставить работать методы мутатора, и не знаю, как запросить у пользователя ввод, чтобы установить все значения для нового курса, а затем вывести их на экран, используя методы доступа и мутатора. Пожалуйста, помогите мне, ребята. Спасибо

public class ManualClass 
{
public static void main(String[] args) 
{
    Course compSci = new Test2().new Course("Comp Sci","IT1101",3.0);
    System.out.println(compSci+ "\n");


    Course dave = new Test2().new Course("Hist1111","World History",4.0);     
    System.out.print(dave.getCourseCode() + " " + dave.getDescription() 
                + " " + dave.getCreditHours() + "\n");
}

public class Course 
{
//Instance Variables
private String courseCode;
private String description;    
private Double creditHours;

public Course() 
{
    courseCode = null;
    creditHours = 0.0;
    description = null;
}

//Constructor
public Course(String courseCode, String description, double creditHours) 
{    
    this.courseCode = courseCode; 
    this.description = description;
    this.creditHours = creditHours;
}

//Accessors (Getters)
public String getCourseCode() 
{
    return courseCode;
}

public String getDescription()
{
    return description;
}

public double getCreditHours()
{
    return creditHours;
}

//Mutators (Setters)
public void setCourseCode(String CourseCode)
{
 this.courseCode = courseCode;
}

public void setDescription(String description)
{
 this.description = description;
}

public void setCreditHours(double creditHours)
{
 this.creditHours = creditHours;
}

    // toString Method
    public String toString()
    {
        DecimalFormat creditsFormat = new DecimalFormat ("#0.0");

        return "Code: " + courseCode + "; Description: " 
               + description + "; creditHours: " 
               + creditsFormat.format(creditHours);
    }

    // Equals Method
    public boolean equals(Object o)
    {
        if (!(o instanceof Course))
            return false;

        else
        {
            Course objCourse = (Course) o;
            if (courseCode.equals(objCourse.courseCode)
                && description == objCourse.description
                && creditHours == objCourse.creditHours)

                return true;

            else
                return false;
        }
    }
}
}

person Community    schedule 17.01.2013    source источник
comment
Это домашнее задание? Если да, объявите об этом :). Кроме того, в какой строке вы получаете упомянутую вами ошибку? Компилятор должен сказать вам.   -  person halfer    schedule 17.01.2013
comment
Как предложил Реймеус ниже, я бы разделил Manual_Class и Course на два независимых класса. То есть Course находится вне Manual_Class. Кроме того, в качестве примечания к стилю я бы превратил Manual_Class в ManualClass. Большинство людей не используют _ в именах классов.   -  person Bryan Glazer    schedule 18.01.2013
comment
Это его домашнее задание. Я рекомендую вам направлять его. Он думает, что хочет знать, как заставить это работать, но на самом деле он пытается учиться. Итак, давайте немного поучим.   -  person Siddharth    schedule 18.01.2013


Ответы (2)


То, что вы пишете, является классическим кодом процедурного языка школьника. Не объектно-ориентированный. Позвольте мне объяснить причину этого утверждения.

При написании кода oop вам нужно учитывать «изменение». Каждый курс, который вы создадите в будущем, не будет иметь одинаковых атрибутов.

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

Если вы думаете как студент, вы создадите 1 класс со всеми этими атрибутами, и у вас будут нулевые значения для всех полей, которые вам не нужны.

Если вы мыслите как зрелый студент, вы, вероятно, создадите несколько классов, таких как CourseLinksOnly, CourseImagesOnly, CourseImagesAndVideos, CourseVideosOnly.

Если вы мыслите как архитектор, вы будете моделировать свой класс с именами и функциями, ориентированными на реальный бизнес. CourseBasic, CourseOnline, CourseClassroom, CourseStarted, CourseCompleted, CourseArchived. И каждый из них, вероятно, будет наследоваться друг от друга. Но при этом оставшаяся часть вашего кода не будет ссылаться на объекты, вместо этого они будут ссылаться на интерфейсы (контракты). И я могу продолжать.....

Мой совет: очень-очень быстро поднимите свое обучение на новый уровень. Думайте полностью как архитектор. Хорошей книгой для начала изучения является Head First Design Patterns Java. Первых 3-х глав достаточно, чтобы привести голову в порядок и отойти от процедурно-языкового мышления :).

person Siddharth    schedule 18.01.2013
comment
Большое спасибо за поддержку, информацию и рекомендацию к прочтению. - person ; 18.01.2013

Поскольку Course не является static внутренним классом, вам необходимо создать квалифицированный экземпляр Course, используя экземпляр Manual_Class:

Course csi = new Manual_Class().new Course("CSI", "Comp Sci", 3.0);

В качестве альтернативы вы можете переместить объявление класса Course из области видимости вашего класса верхнего уровня Manual_Class. В этом случае вы можете использовать свой текущий синтаксис.

Кроме того, вы можете иметь только одно объявление класса public в файле, который должен быть вашим классом верхнего уровня. Вы можете удалить это ключевое слово из объявления класса Course.

person Reimeus    schedule 17.01.2013
comment
Желательно то, что сказал Реймеус, но вы также можете сделать свой Course класс static. - person Caesar Ralf; 18.01.2013