我有一位来自我教授的作业,我无法弄清楚如何正确创建一个对象数组。除了Client类之外,没有类可以更改;界面也不能改变。我应该能够从几个子类创建一个对象数组,并能够访问所有方法。
这是我的错误报告:
MathewBorumP5.java:68: error: cannot find symbol
revenue = movies[x].calcRevenue();
^
symbol: method calcRevenue()
location: class Movie
MathewBorumP5.java:70: error: cannot find symbol
movies[x].getYear(), movies[x].calcRevenue(),
^
symbol: method calcRevenue()
location: class Movie
MathewBorumP5.java:71: error: cannot find symbol
movies[x].calcProfit(revenue), movies[x].categor
y());
^
symbol: method calcProfit(double)
location: class Movie
MathewBorumP5.java:71: error: cannot find symbol
movies[x].calcProfit(revenue), movies[x].categor
y());
^
symbol: method category()
location: class Movie
MathewBorumP5.java:78: error: cannot find symbol
totalRevenue = totalRevenue + movies[x].calcRevenue();
^
symbol: method calcRevenue()
location: class Movie
MathewBorumP5.java:81: error: cannot find symbol
"%.3f million dollars.", Movie[0].getTotalMovies(), tota
lRevenue);
^
symbol: variable Movie
location: class MathewBorumP5
6 errors
我的客户类:
import java.util.Scanner;
public class MathewBorumP5 {
public static void main(String[] args) {
int choice;
boolean restart = true;
Scanner input = new Scanner(System.in);
Movie[] movies = new Movie[6];
movies[0] = new Animated("Beauty and the Beast", "Gary Trousdale", 1991,
10.0, 5.0, 2.0);
movies[1] = new Animated("Peter Pan", "Clyde Geronimi", 1953, 2.0, 1.2,
.5);
movies[2] = new Documentary("Planet Earth", "Alastair Fothergill", 2006,
10, 20, 5);
movies[3] = new Documentary("Drain the Ocean", "Steve Nichols", 2009, 9,
2,3);
movies[4] = new Drama("The Shawshank Redemption", "Frank Darabont",
1994, 89, 7, 2);
movies[5] = new Drama("The Godfather", "Francis Coppola", 1972, 10, 3,
5);
do {
menu();
System.out.print("Enter a number from 1 - 5: ");
choice = input.nextInt();
System.out.print("\n");
switch(choice) {
case 1:
item1(movies);
break;
case 2:
item2(movies);
break;
case 3:
break;
case 4:
break;
case 5:
restart = false;
break;
default:
System.out.print("You didn't enter a number between 1"
+ " and 5.\n");
break;
}
} while(restart == true);
}
public static void menu() {
System.out.print("Warren Moore Movie Menu\n");
System.out.print("1. Show the list of movies in the array\n");
System.out.print("2. Display the total number of movies and the total" +
" revenues\n");
System.out.print("3. Search movie by title\n");
System.out.print("4. Display movies sorted by profit in decreasing" +
" order\n");
System.out.print("5. Exit\n");
}
public static void item1(Movie[] movies) {
double revenue;
System.out.printf("%-26s%-6s%-10s%-9s%-11s\n", "Title", "Year",
"Revenue", "Profit", "Category");
for(int x = 0; x <= 6; x++) {
revenue = movies[x].calcRevenue();
System.out.printf("%-26s%-6s%-10s%-9s%-11s\n", movies[x].getTitle(),
movies[x].getYear(), movies[x].calcRevenue(),
movies[x].calcProfit(revenue), movies[x].category());
}
}
public static void item2(Movie[] movies) {
double totalRevenue;
for(int x = movies[0].getTotalMovies(); x > 0; x--) {
totalRevenue = totalRevenue + movies[x].calcRevenue();
}
printf("The total number of moves is %d, and their total revenue is" +
"%.3f million dollars.", Movie[0].getTotalMovies(), totalRevenue);
}
}
我的超类:
public class Movie {
protected String title;
protected String director;
protected int year;
protected double productionCost;
private static int totalMovies = 0;
public Movie() {
totalMovies++;
}
public Movie(String newTitle, String newDirector, int newYear,
double newCost) {
totalMovies++;
title = newTitle;
director = newDirector;
year = newYear;
productionCost = newCost;
}
public int getTotalMovies() {
return totalMovies;
}
public String getTitle() {
return title;
}
public void setTitle(String newTitle) {
this.title = title;
}
public String getDirector() {
return director;
}
public void setDirector(String director) {
this.director = director;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public double getProductionCost() {
return productionCost;
}
public void setProductionCost(double productionCost) {
this.productionCost = productionCost;
}
public String toString() {
return "";
}
}
类模板(我的所有类基本相同):
public class Animated extends Movie implements Profitable {
private double rate;
private double income;
public Animated() {
super();
}
public Animated(String title, String director, int year, double cost,
double rate, double income) {
super(title, director, year, cost);
this.rate = rate;
this.income = income;
}
public double getRate() {
return rate;
}
public void setRate(double rate) {
this.rate = rate;
}
public double getIncome() {
return income;
}
public void setIncome(double income) {
this.income = income;
}
public String category() {
return "Animated";
}
public double calcRevenue() {
return (income * rate);
}
public double calcProfit(double revenue) {
return (revenue - super.productionCost);
}
public String toString() {
return (super.toString() + "");
}
}
我的界面:
public interface Profitable {
public abstract String category();
public abstract double calcRevenue();
public abstract double calcProfit(double revenue);
}
答案 0 :(得分:0)
您需要使用instanceof添加适当的强制转换和测试。
revenue = movies[x].calcRevenue();
必须替换为
if (movies[x] instanceof Profitable) {
revenue = ((Profitable)movies[x]).calcRevenue();
} else {
// decide what to do if movie if not profitable that is to say does not have the calcRevenue method
}