我正在从事一个练习项目,电影商店系统。如何显示班级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);
}
}
答案 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上)获取所需的属性(通过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++;
}