2016-12-06 4 views
0

BlueJ를 사용하여 Java로 클래스를 만들려고합니다. 내 수업 이름은 자동차입니다. 내 목표는 Constructor 메소드를 사용하여 연도, 색상, 브랜드, 문 개수, 킬로미터 수, 자동 (부울) 인 경우, 판매 된 경우 (부울), 설명 및 기타 변수를 사용하여 자동차를 생성하는 것입니다. 식별 번호. 모든 변수에는 설정된 기본값, 최소 및 최대 허용 값이 있습니다.Java의 게터, 세터 및 생성자 - 자동차 만들기 및 스타킹

내 메소드에 getVariablename 및 setVariablename을 사용해야합니다. 내 색상 및 브랜드 변수는 int이며, 클래스의 표에서 문자열 대응 항목을 검색하는 메소드를 만들었습니다.

내 문제는 내 변수를 한 가지 방법으로 설정하고 다른 변수로 가져 오는 원리를 이해하지 못하는 것입니다 (허용되는 값인지 확인하는 동안). 또한 Setter 및 Getter 메서드가 있으면 생성자 메서드를 만들 때 무엇을 적어야합니까? 나는이 목적을 위해 유효하게 세터의 예는

  • :

    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 ...의 필요성을 이해하지 못합니다.

  • setNbrDoors에서 변수 p를 가져 와서 값을 반환하고 가져올 수있는 getter 메서드를 어떻게 만들 수 있습니까? 자동차 생성자의 nbrDoors에 사용됩니까?

  • getters에서 값을 가져올 수 있도록 Constructor 메소드에서 작성해야하는 것은 무엇입니까?

이 두 번째 부분은 내가 다음 변수에 대한 입력 값을 모두 사용자에게 사용자가 작성하는 자동차를 재고하기 위해 테이블을 만들 수있는 약간의 코드를 작성해야합니다 모든 때문이다.

P.S. : 본래의 작품은 프랑스어로 작성되어 있으므로 귀하의 이해를 돕기 위해 변수와 메소드 이름을 번역했습니다. 또한, 변수 이름, 메소드 등이 모두 부과됩니다, 나는이 방법으로 클래스를 정확하게 만들려고합니다.

편집 : 따라서 브랜드 및 색상 변환을위한 정적 사용도 적용됩니다. 그 2 개의 메소드는, int 치로부터 캐릭터의 String를 돌려주는 것에 만 사용됩니다. 그들은 생성자에서 사용되지 않습니다. 마지막으로 예외는 별도의 유효성 검사 루프를 사용하여 작업의 두 번째 부분에서 처리됩니다. Automobile 클래스는 실제로 "car"객체의 생성을 처리하기 위해 실제로 사용됩니다.

답변

0

은 당신의 코드에 몇 가지 문제가 있습니다

(1) 귀하는 적절한 인스턴스 변수를 (같은 year, brand, 등) 자동차

에 대한

(2) 사용하지 않았다가 없었어요 this. (인스턴스 변수를 만들지 않았으므로) enter code here. this은 항상 현재 객체를 참조합니다. 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

그래서이를 사용해야합니다. 모든 세터에서. 이 변수에 대한 게터가 어떻게 생겼는지에 대한 예를 제공 할 수 있습니까? 또한 브랜드 및 색상 변환을위한 정적도 적용됩니다. 그 2 개의 메소드는, int 치로부터 캐릭터의 String를 돌려주는 것에 만 사용됩니다. 그들은 생성자에서 사용되지 않습니다. 마지막으로 예외는 별도의 유효성 검사 루프를 사용하여 작업의 두 번째 부분에서 처리됩니다. Automobile 클래스는 실제로 자동차를 만드는 용도로만 사용됩니다. (나는 이것을 내 게시물에 추가 할 것입니다.) –

+0

위 코드를 getter로 업데이트했습니다. – developer

+0

javaguy 정말 대단합니다. 추가 질문이 있습니다. 고유 한 각 자동차의 식별 번호가 될 변수를 만들어야하고 1에서 시작합니다 (첫 번째 자동차는 1, 두 번째 자동차는 2 등). 이후, 내가 만든 자동차를 복제 할 수있는 방법을 갖게 될 것이므로, 판매 및 식별 변수를 제외한 모든 동일한 속성을 가진 새 자동차를 만드십시오. 왜냐하면 매번 새로운 값을 생성 할 때마다 모든 변수의 값을 복사하는 방법은 어떨까요? 감사합니다 –

0

1은 개체에 속성을 .P = P를 사용하는 것이 좋습니다.

2 setNbrDoors, 빈 공간을 반환, 당신은 당신이 getNbrDoors을 만들어야합니다, 그것에서 변수를 선택하지 못할 : int getNbrDoors() { return this.p; }