【发布时间】:2021-04-22 01:16:26
【问题描述】:
创建一个类作为每个电视节目的父类 类型:家庭、喜剧、黑暗、神秘、其他。
每种类型的电视节目都应继承自该父类。确定 Parent中存在哪些数据和方法以及每个中存在什么 child 每个子类应该有两个构造函数。在主() 程序,将所有电视节目存储在一个 ArrayList 中使用一段时间 循环询问用户他们想问什么节目 回答与电视节目有关的问题。使用 ArrayList 来 回答问题。为用户提供显示能力 所有电视节目和相应的数据。
到目前为止,我已经设法为每种类型的节目编写了一个超类和子类,并将电视节目存储在一个数组列表中。我被其他所有事情困住了。
tvShowData.csv 的样本:
Title,audience ,network,actor 1,actor 2,actor 3,actor 4,TV Show Type
The Walking Dead,11.24,AMC,Norman Reedus,Andrew Lincoln,Lauren Cohan,Steven Yeun,Dark
Teen Wolf,3.02,MTV,Dylan O'Brien,Tyler Posey,Holland Roden,Tyler Hoechlin,Dark
Scanner keyboard = new Scanner(System.in);
String file = "tvshowData.csv";
List<List<String>> tvShows = new ArrayList<>();
String line;
String userInput;
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
while ((line = br.readLine()) != null) {
String[] shows = line.split(",");
tvShows.add(Arrays.asList(shows));
}
System.out.println(tvShows);
}
System.out.println("Enter the TV Show you want to know about:");
userInput = keyboard.nextLine();
// Superclass
public class TVShows
{
private String title;
private double audience;
private String network;
private String actor1, actor2, actor3, actor4;
public TVShows(String title, double audience, String network)
{
this.title = title;
this.audience = audience;
this.network = network;
}
public TVShows(String actor1, String actor2, String actor3, String actor4)
{
this.actor1 = actor1;
this.actor2 = actor2;
this.actor3 = actor3;
this.actor4 = actor4;
}
public String getTitle()
{
return title;
}
public double getAudience()
{
return audience;
}
public String network()
{
return network;
}
public String getActor1()
{
return actor1;
}
public String getActor2()
{
return actor2;
}
public String getActor3()
{
return actor3;
}
public String getActor4()
{
return actor4;
}
}
// Subclass
public class Dark extends TVShows
{
private String tvShowType;
public Dark(String nameOfShow, double audience, String network)
{
super(nameOfShow, audience, network);
}
public Dark(String actor1, String actor2, String actor3, String actor4)
{
super(actor1, actor2, actor3, actor4);
}
public void setTvShowType(String tvShowType)
{
this.tvShowType = tvShowType;
}
public String getTvShowType()
{
return tvShowType;
}
}
【问题讨论】:
-
用户可以询问有关节目的具体细节,例如首映的网络或演员的姓名。
-
对“如何搜索特定字段”的简短回答是使用循环扫描数组并检查字符串是否匹配
if(showString.equals(inputString)){...}或包含输入if(showString.contains(inputString)){...}. Abra 提到的更好的答案是创建一个自定义类/对象来存储数据,以便您可以更轻松地管理数据。 -
@Abra 我已经为每个电视节目类型创建了一个电视节目超类和子类。我还将电视节目存储在提示中指定的数组列表中。我不知道如何获取用户输入的电视节目以及用户想知道的关于该节目的具体细节并显示它。
-
一个提示,主要是你应该有一个包含所有字段的构造函数,因为它用于获取填充了所有字段的实例,使用你的构造函数,实例只是部分填充了数据(演员或其他一些字段)。说使用填充演员的构造函数,然后在创建对象后手动添加标题。似乎有很多额外的工作(假设您知道您不能申请相同的对象 2 构造函数)。此外,这里的专业化有点多余,只需在超类上添加一个额外的字段(可能是 enum : dark 等)
-
另一个提示,对于演员,你可以在 csv 结尾处所有演员,你可以摆脱强制有 4 个演员的限制。直到演员,所有字段都是必需的并且知道演员开始的位置。使用它来获取演员列表(比如说一个节目可以有 30 个演员,所以你必须写一个 30 个文件和构造函数 +30 个参数。非常冗长)。
List of actors可以装多少你想要的,只要看看演员提供的代码。