2016-12-06 1 views
0

Я пытаюсь создать класс на Java с помощью BlueJ. Мой класс называется Automobile. Моя цель - использовать мой метод Constructor для создания автомобилей с переменными: год, цвет, бренд, количество дверей, количество километров, если оно автоматическое (логическое), если оно продано (булево), описание и идентификационный номер. Все переменные имеют заданное значение по умолчанию, минимальное и максимально допустимое значение.Getters, Setters and Constructors в Java - Создание автомобиля и его хранение

Мне нужно использовать getVariablename и setVariablename для моих методов. Мои переменные цвета и бренда являются int, и я сделал методы для извлечения их экземпляров String в таблице в моем классе.

Моя проблема заключается в том, что я не понимаю принцип установки моей переменной одним методом и получения ее в другой (при условии, что это принятое значение). Кроме того, как только у меня есть метод Setter и Getter, что мне нужно записать при создании моего метода Constructor?

До сих пор, у меня есть это:

public class Automobile { 

    private static final String[] COLORS = { "Other", "Noir", "Blanc", "Bleu Nuit", "Bleu Clair", "Vert Pomme", "Vert Bouteille", "Taupe", "Argent", "Sable"}; 

    private static final String[] BRANDS = { "Autre", "Mazda", "Toyota", "Ford", "GM", "Hyunday", "BMW", "SAAB", "Honda"};  


    public static final int COLOR_DEF = 8; 
    public static final int COLOR_MIN = 0; 
    public static final int COLOR_MAX = COULEURS.length - 1; 

    public static final int BRAND_DEF = 4; 
    public static final int BRAND_MIN = 0; 
    public static final int BRAND_MAX = MARQUES.length - 1; 

    public static final double KILO_DEFAULT = 55000; 
    public static final double KILO_MIN = 15000; 
    public static final double KILO_MAX = 140000; 

    public static final int TWO_DOORS = 2; 
    public static final int FOUR_DOORS = 4; 
    public static final int DOORS_DEFAULT = FOUR_DOORS; 

    public static final boolean AUTO_DEF = true; 
    public static final int YEAR_MIN = 1997; 
    public static final int YEAR_MAX = 2016; 
    public static final int YEAR_DEFAUT = 2007; 

    public static final String COMM_DEFAUT = ""; 


    public static String color (int cou) { 

     String chainecolor = ""; 

     if (cou >= COLOR_MIN && cou <= COLOR_MAX) { 
      chainecolor = COLORS[cou]; 
     } 

     return chainecolor; 
     } //This method is to return the String value of a color from its int value using the COLORS table. If invalid it returns an empty chain. 


    public static String brand (int br) { 

     String chainebrand = ""; 

     if (ma >= BRAND_MIN && ma <= BRAND_MAX) { 
      chainebrand = BRANDS[br]; 
     } 
     return chainebrand; 
     } //same thing for the brand 

    public Automobile (int brand, int year, int color, boolean automatic, double kilometers,int nbrDoors, String description, boolean sold){ 

     //To be completed   
    } 

    //here i'm supposed to create getters that return int values for everything but automatic, sold and description 

    public void setYear (int year) { 
     if (year >= YEAR_MIN && YEAR <= YEAR_MAX) { 
     year = year; 
     } 
    } // supposed to be the setter for my year, as long as it's within the accepted values 

    public void setMarque (int brand){ 
     if (brand >= BRAND_MIN && brand <= BRAND_MAX) { 
      brand = brand; 
     } 
    } //same, for the brand 

    public void setColor (int color) { 

     if (color >= COLOR_MIN && color <= COLOR_MAX){ 
      color = color; 
     } 
    }// same for the color 

    public void setNbrDoors (int p) { 

     if (p == TWO_DOORS || p == FOUR_DOORS){ 
      p = p; 
     } 
    } // same for the door. I am forced to use (int p) as the variable for this method, which confuses me as to how I will refer to it from nbrDoors up in the Automobile constructor method 

} // Automobile 

Так что мои трудности лежат в:

  • ли примеры сеттеров, которые я сделал действительно для этой цели? Я не понимаю, что нужно для p = p или color = color ...

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

  • Что я должен написать в методе «Конструктор», например, он сможет получить свои значения от геттеров?

Это все потому, что вторая часть мне придется создать небольшой код, чтобы попросить пользователя ввести все значения переменных, а затем создать таблицу запасете автомобилей создает пользователь.

P.S .: работа изначально на французском языке, поэтому я перевел имена переменных и методов наилучшим образом, чтобы я мог лучше понять. Кроме того, имена переменных, методы и т. Д. Все наложены, я FORCED, чтобы сделать класс именно так.

РЕДАКТИРОВАТЬ: Как таковое, также применяется статичность для маркировки и преобразования цвета. Эти 2 метода предназначены исключительно для возврата строки символа из значения int. они не используются в конструкторе. Наконец, исключения будут обрабатываться во второй части работы, используя отдельный цикл проверки. Класс Automobile действительно используется исключительно для обработки создания объекта «автомобиль».

ответ

0

Есть несколько проблем, с вашим кодом:

(1) У вас не было каких-либо собственных переменных экземпляра (как year, brand, и т.д ..) для автомобильного

(2) Вы не использовали this., чтобы установить переменные экземпляра (потому что вы их не создали) enter code here. Просто отметьте, что всегда ссылается на текущий объект, см. here, то есть, когда вы говорите this.year= year, вы фактически назначаете правую сторону year значение переменной year текущего объекта (слева).

Вы можете передать код ниже с комментариями:

public class Automobile { 

     private int year; 
     private int color; 
     private int brand; 

     //add other fields 

     public Automobile (int brand, int year, int color, boolean automatic, double kilometers,int nbrDoors, String description, boolean sold) { 

      if (year >= YEAR_MIN && year <= YEAR_MAX) { 
       this.year = year; 
      } else { 
       new IllegalArgumentException("Invalid Year Passed to construct Automobile"); 
      } 

      //Similarly add other validations for brand, color, etc.. 
     } 

     public void setYear (int year) { 
      if (year >= YEAR_MIN && YEAR <= YEAR_MAX) { 
       //USE 'this.' as shown below' to set the given year to 'this' object's year 
       this.year = year; 
      } 
     } 

     public int getYear() { 
      return year; 
     } 

     //Similarly add setters and getters for year, color, brand, etc... 
} 
+0

так что я должен использовать это. во всех сеттерах. вы могли бы привести пример того, как будет выглядеть Getter для этой переменной? Также накладывается статичность для преобразования бренда и цвета. Эти 2 метода предназначены исключительно для возврата строки символа из значения int. они не используются в конструкторе. Наконец, исключения будут обрабатываться во второй части работы, используя отдельный цикл проверки. Класс Automobile действительно используется исключительно для создания автомобиля. (Я добавлю это на свой пост) –

+0

Обновленный выше код с геттером – developer

+0

javaguy, так как вы так удивительны, у меня есть дополнительный вопрос для вас. Я должен создать переменную, которая будет идентификационным номером для каждого автомобиля, который я делаю, уникальным и начинающимся с 1 (так что первый автомобиль будет 1, второй будет 2 и т. Д.). Впоследствии у меня будет метод клонирования любого из автомобилей, которые я создал, поэтому создайте новый автомобиль со всеми теми же атрибутами, ЗА ИСКЛЮЧЕНИЕМ проданных и идентификационных переменных. для проданного, я могу просто по умолчанию вернуть его в false, но как бы мне переписать значения всех моих переменных при генерации нового идентификационного номера каждый раз? Спасибо –

0

1-это лучше использовать это .p = р приписывать на вашем объекте.

2-setNbrDoors, возвращает пустоту, вы не можете подобрать переменную из этого, вы должны создать getNbrDoors: int getNbrDoors() { return this.p; }