2014-10-29 3 views
-1

나는 영화 프로젝트 시스템을 연습하고있다. Movie 클래스의 객체는 어떻게 표시합니까? 클래스 Movie은 모두 movie, movie1, movie2입니다.클래스의 객체를 표시하는 방법은 무엇입니까?

어떻게 동영상을 선택하고 하나의 방법 만 사용할 수 있습니까? 예를 들어 movie1을 선택한 다음이 메소드를 실행합니다. movie1.dispMovie() 또는 메소드를 수동으로 실행해야합니까?

public class movie { 

private String name; 
private String desc; 
private int year; 

public static int movieNum = 0; 

public String getName() { 
    return name; 
} 
public void setName(String name) { 
    this.name = name; 
} 
public String getDesc() { 
    return desc; 
} 
public void setDesc(String desc) { 
    this.desc = desc; 
} 
public int getYear() { 
    return year; 
} 
public void setYear(int year) { 
    this.year = year; 
} 

public void dispdesc(){ 

    movieNum = movieNum + 1; 

    System.out.println("Movie #" + movieNum); 
    System.out.println("Title: " + getName()); 
    System.out.println("Description: " + getDesc()); 
    System.out.println("Year: " + getYear()); 
} 
} 


public class orangeBox { 

public static void main(String[] args) { 

    movie up = new movie(); 
    up.setName("Up"); 
    up.setDesc("To avoid being taken away to a nursing home, an old widower tries to fly his home to Paradise Falls, South America, along with a boy scout who accidently lifted off with him. "); 
    up.setYear(2008); 
    up.dispdesc(); 

    movie wallE = new movie(); 
    wallE.setName("Wall-E"); 
    wallE.setDesc("In the distant future, a small waste collecting robot inadvertently embarks on a space journey that will ultimately decide the fate of mankind."); 
    wallE.setYear(2008); 
    wallE.dispdesc(); 

} 

} 

메인 클래스에서 this.dispdesc()를 수행하지 않고 모든 동영상을 표시하는 메소드가 필요합니다.

편집

public class Store { 

public static void main(String[] args) { 

    Movie up = new Movie(); 
    up.setName("Up"); 
    up.setDesc("To avoid being taken away..."); 
    up.setYear(2009); 

    System.out.println(up); 

} 

} 
+3

코드를 표시하십시오. –

+1

[Reflection] (http://docs.oracle.com/javase/tutorial/reflect/). – Maroun

+0

@MarounMaroun - 질문을 오해 한 적이 있습니까? – TheLostMind

답변

0

코드에서 몇 가지 나쁜 관행이있다.

1) 규약 : 클래스는 대문자로 작성됩니다.

2) 동영상은 데이터 유형이어야합니다. 이 클래스 내에서 System.out을 호출하는 것은 좋지 않습니다. 왜냐하면 출력 시스템을 변경하는 것을 고려한다면, 더 큰 프로젝트를 가질 경우 변경하기에 너무 많은 (그리고 광범위한) 장소가 있기 때문입니다. toString 메서드를 재정의하고 \n\t 등의 원하는 형식으로 반환 문자열을 작성하는 것이 좋습니다.

System.out은 메인에서 호출됩니다.

3) 번호 매기기의 경우 생성자에서 정적 번호 movieNum을 증가 시키십시오. 필요한 모든 속성을 허용하는 생성자를 고려해야합니다.

4) 여러 영화 - 객체)는 List (아마도 ArrayList에 내에서 저장

EDIT 2

)

내가 언급 한 바와 같이 저장하려면, 그것은 의미 "나쁜 관행은" , 일을한다고해도 좋을만큼 좋은 방법이라고 생각합니다.

무비 클래스와 비슷한 100 개 이상의 클래스가 있다고 상상해보십시오. 중간 크기의 프로젝트에서는 데이터를 저장하는 것이 유일한 목적으로 100 개 이상의 클래스를 갖는 것이 표준입니다. 이제는 각각 적어도 1 System.out 진술을 상상해보십시오. 시간이 지나면 못생긴 콘솔 출력을 원하지만 GUI 라이브러리 (예 : Swing)로 이동하려고합니다. 그런 다음 각 클래스에서 각각 System.out 문을 삭제할 수 있습니다. 클래스의 엄청난 금액이 있기 때문에이를 조정하는 데 오랜 시간이 걸리며 널리 퍼져 있기 때문에 일부를 놓치기 쉽습니다. 어쩌면 다른 변화가 필요할 수도 있습니다. 데이터 유형 (예 : 영화 또는 가능한 Store 클래스 등) 및 io 논리 (예 : 기본)를 분리하는 것이 더 쉽습니다.

다시 : 귀하의 접근 방식 역시 훌륭하게 작동합니다. 그러나 더 복잡한 프로젝트 (예 : 일부 게임 또는 기타)를 시작하려는 경우 처음부터 올바른 방식으로 수행하는 것이 더 쉽습니다. 그러면 프로젝트의 중요한 부분을보다 쉽게 ​​변경할 수 있습니다 (예 :

오브젝트를 출력하는 일반적인 방법은 원하는 속성을 얻고 (getter을 통해) 레이블을 표시하거나 또는 toString 메소드를 대체하는 것입니다 (일반적으로 GUI에서). (모든 클래스가 암시 적으로 Object 클래스를 확장하므로) 모든 객체를 포함합니다.

@Override 
public String toString() { 
    String s = "Movie #\t"+getMovieNumber()+ "\n"; // \n is a linebreak and \t is indention 
    s += "Title: \t"+getName()+"\n"; 
    s += "Description: \t"+getDescription()+"\n"; 
    s += "Year: \t"+getYear(); 
    return s; 
} 

은 (+=와 문자열을 구축하는 대신 여기 StringBuilder 클래스를 사용하는 것이 좋습니다. 단지 단순 만 그것을 사용합니다.)

당신이 당신의 영화 클래스에서이 조각을 가지고 있고 당신이에 suitible 생성자 할 수 있다면 주 : 3

Movie up = new Movie("Up", "To avoid being taken away....", 2008); 
System.out.println(up); 

Edit2가

)

+0

초급자로서, 나는 1, 3, 어쩌면 4 만 이해할 수 있습니다. 좀 더 흠, 2에 대한 초보자 친화적 인 설명을 요청할 수 있습니까? –

+0

수 있습니다. 봐 편집;) –

+0

흠, 나는 아직 완전히 모든 것을 이해한다고 말할 수 없다. 비록 내가이 점을 GUI에서 GUI로 옮길 것이기 때문에이 코드가 더 낫다는 것을 알게된다. toString()을 설명 할 수 있습니까? 그리고 @Override는 무엇을합니까? 기존의 메소드/함수를 오버라이드합니까? –

1
public static void main(String[] args) { 

Arraylist<movie> myMovieList =new ArrayList<movie>(); 

movie up = new movie(); 
up.setName("Up"); 
up.setDesc("To avoid being taken away to a nursing home, an old widower tries to fly his home to Paradise Falls, South America, along with a boy scout who accidently lifted off with him. "); 
up.setYear(2008); 
myMovieList.add(up) 

movie wallE = new movie(); 
wallE.setName("Wall-E"); 
wallE.setDesc("In the distant future, a small waste collecting robot inadvertently embarks on a space journey that will ultimately decide the fate of mankind."); 
wallE.setYear(2008); 
myMovieList.add(wallE) 

dispdesc(myMovieList); 
} 

public void dispdesc(ArrayList<movie> movieList){ 

for(movie object : movieList) 
{ 
movieNum = movieNum + 1; 

System.out.println("Movie #" + movieNum); 
System.out.println("Title: " + getName()); 
System.out.println("Description: " + getDesc()); 
System.out.println("Year: " + getYear()); 
} 
} 
+0

예를 들어, 가능하다면 런타임에 새 객체를 만들겠습니다 (런타임에 객체를 만들 수 있습니다. 미래에는 GUI가있는 시스템과 추가 할 옵션을 만들고 싶습니다. 목록에 새 영화) 코드 구조가 바뀔까요? –

+0

네 요구에 따라 변경 될 것이다. 그러나 당신이 그것을 변경할 필요가 없다고 언급하면 ​​실행시에 오브젝트를 한번 추가하면 한번에 dispdesc를 호출 할 필요가있다. –

+0

질문, add (x) 메서드는 어디에 있습니까? –

관련 문제