如何显示一个类的对象?

时间:2014-10-29 07:00:09

标签: java class object

我正在从事一个练习项目,电影商店系统。如何显示班级Movie的对象?班级Movie包含moviemovie1movie2

另外,如何选择电影,只使用一种方法?例如,我选择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);

}

}

2 个答案:

答案 0 :(得分: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()); 
} 
}

答案 1 :(得分:1)

您的代码中有几种不良做法。

1)约定:类将以大写字母书写。

2)电影应该只是一种数据类型。在这个类中调用System.out是不好的,因为如果你有一个更大的项目,有太多(和广泛的)地方可以进行更改,如果你考虑更改输出系统。请考虑重写toString方法,并使用\n\t以所需格式构建返回字符串,依此类推。

将从主要部门调用System.out,例如

3)对于编号,考虑在构造函数中增加静态数字movieNum!你应该考虑一个构造函数,它接受所有必要的属性。

4)要保存多个电影对象,请将它们保存在List(可能是ArrayList)

编辑

for 2)

正如我所提到的,这是&#34;不良做法&#34;意思是,它被认为是一种不太好的完成事物的方式,即使它们起作用。

想象一下,你有超过100个类与你的电影类相似。在中型项目中,至少有100个类是标准的,其唯一目的是保存数据。现在想象一下,至少有一个System.out语句。过了一段时间,你不想有一个丑陋的控制台输出,但想要移动到GUI库(例如Swing)。然后,您可以删除每个类中的每个System.out语句。由于课堂上有大量的课程需要花费很长时间来调整这些课程,因为它们很普遍,所以很容易错过一些课程。也许你还需要其他改变。更容易解耦数据类型(例如Movie,或可能的Store类等)和io-logic(例如你的主要)。

再次:你的方法也可以正常工作,但是如果你想要开始一个更复杂的项目(例如某种类型的游戏,或者其他类型的游戏),从一开始就以更正的方式更容易。然后,您可以更轻松地更改项目的关键部分(例如输入/输出框架,即GUI)

输出对象的常用方法是(通常在GUI上)获取所需的属性(通过getter)并显示在标签上等等或覆盖toString方法拥有每个对象(因为所有类都隐式扩展了类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类,而不是使用+=构建字符串。仅仅为了简单起见而使用它。)

如果你的Movie类中有这个片段,并且你可以在main中使用合适的构造函数:

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

<强> EDIT2

for 3)

private static int movieNum = 0;

public Movie() {
    movieNum++;
}