首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

求大牛帮忙解决一个课本的例题,源代码却有异常

2013-01-11 
求大牛帮忙解决一个课本的例题,源代码却有错误题目:有一个音像店出租电影业务,需要编写一个应用程序进行管

求大牛帮忙解决一个课本的例题,源代码却有错误
题目:有一个音像店出租电影业务,需要编写一个应用程序进行管理,在进行出租时能够很快找到顾客需要的电影。例如,在实际应用中,可能会通过以下方式查找需要的电影:
  通过标题(title)查找电影
  可将电影分成不同的类型(type),如喜剧片、战斗片等。因此在进行出租时,可在某一特定的类型中查找电影;
  查找包括某一演员(actor/actress)的电影

代码:
电影类Moive:

import java.util.*; 
public class Movie {
private String title,type;
private Vector<String>actors;
public String getTitle(){
return title;
}
public String getType(){
return type;
}
public Vector<String>getActors(){
return actors;
}
public void setTitle(String aTitle){
title=aTitle;
}
public void setType(String aType){
type=aType;
}
public Movie(){
this("???","???");
}
public Movie(String aTitle,String aType){
title=aTitle;
type=aType;
actors=new Vector<String>();
}
@Override
public String toString(){
return ("Movie:"+"""+title+""");
}
public void addActor(String anActor){
actors.add(anActor);
}
}


MovieStore类:
import java.util.*;

public class MovieStore {
private Hashtable movieList, actorList, typeList;

public Hashtable getMovieList() {
return movieList;
}

public Hashtable getActorList() {
return actorList;
}

public Hashtable getTypeList() {
return typeList;
}

public MovieStore() {
movieList = new Hashtable();
actorList = new Hashtable();
typeList = new Hashtable();
}

public String toString() {
return ("MovieStore with" + movieList.size() + "movies.");
}

public void addMovie(Movie aMovie) {
movieList.put(aMovie.getTitle(), aMovie);
if (!typeList.containsKey(aMovie.getType())) {
typeList.put(aMovie.getType(), new Vector<Movie>());
}
((Vector<Movie>) typeList.get(aMovie.getType())).add(aMovie);
for (String anActor : aMovie.getActors()) {
if (!actorList.containsKey(anActor)) {
actorList.put(anActor, new Vector<Movie>());
}
((Vector<Movie>) actorList.get(anActor)).add(aMovie);
}
}

public void removeMovie(Movie aMovie) {
movieList.remove(aMovie.getTitle());
((Hashtable) typeList.get(aMovie.getType())).remove(aMovie);
if (!((Hashtable) typeList.get(aMovie.getType())).isEmpty()) {
typeList.remove(aMovie.getType());
}
for (String anActor : aMovie.getActors()) {
((Vector<Movie>) actorList.get(anActor)).removeElement(aMovie);
if (!((Hashtable) actorList.get(anActor)).isEmpty()) {
actorList.remove(anActor);
}
}
}

public void removeMovie(String aTitle){
if(movieList.get(aTitle)==null){
System.out.println("No movie with that title");
}else{
removeMovie((Movie) movieList.get(aTitle));
}
}

private void removeMovie(Vector<Movie> vector) {
// TODO Auto-generated method stub

}

public void listMovies(){
Enumeration<String>titles=movieList.keys();


while(titles.hasMoreElements()){
System.out.println(titles.nextElement());
}
}

public void listMoviesWithActor(String anActor){
Iterator<Movie>someMovies=((AbstractList<Movie>) actorList.get(anActor)).iterator();
while(someMovies.hasNext()){
System.out.println(someMovies.next());
}
}

public void listMoviesOfType(String aType){
Vector<Movie>someMovies=(Vector<Movie>) typeList.get(aType);
for(Movie m:someMovies){
System.out.println(m);
}
}
}



测试类:

public class MovieStoreTester {
public static void main(String args[]){
MovieStore aStore=new MovieStore();
Movie aMovie=new Movie("白毛女","悲剧片");
aMovie.addActor("田华");
aMovie.addActor("李百万");
aMovie.addActor("陈强");
aStore.addMovie(aMovie);

aMovie=new Movie("党的女儿","教育片");
aMovie.addActor("田华");
aMovie.addActor("陈戈");
aStore.addMovie(aMovie);

aMovie=new Movie("红色娘子军","教育片");
aMovie.addActor("祝希娟");
aMovie.addActor("王心刚");
aMovie.addActor("陈强");
aStore.addMovie(aMovie);

aMovie=new Movie("五朵金花","爱情片");
aMovie.addActor("陈丽坤");
aMovie.addActor("赵丹");
aStore.addMovie(aMovie);

aMovie=new Movie("上甘岭","战斗片");
aMovie.addActor("陈强");
aMovie.addActor("高宝成");
aStore.addMovie(aMovie);

aMovie=new Movie("马路天使","喜剧片");
aMovie.addActor("赵丹");
aMovie.addActor("周璇");
aStore.addMovie(aMovie);

aMovie=new Movie("少林寺","武打片");
aMovie.addActor("葛优");
aStore.addMovie(aMovie);

aMovie=new Movie("我的父亲母亲","爱情片");
aMovie.addActor("章子怡");
aMovie.addActor("孙红雷");
aStore.addMovie(aMovie);

aMovie=new Movie("红高粱","艺术片");
aMovie.addActor("巩俐");
aMovie.addActor("姜文");
aStore.addMovie(aMovie);

System.out.println("Here are the movies in :"+aStore);
System.out.println("删除白毛女");
aStore.removeMovie("白毛女");
System.out.println("删除秋菊打官司");
aStore.removeMovie("秋菊打官司");

System.out.println("\n教育片");
aStore.listMoviesOfType("教育片");
System.out.println("\n爱情片");
aStore.listMoviesOfType("爱情片");

System.out.println("\n陈强的电影::");
aStore.listMoviesWithActor("陈强");
System.out.println("\n赵丹的电影::");
aStore.listMoviesWithActor("赵丹");
}
}



错误在于MovieStore中的removeMovie方法! vector iterator 哈希表
[解决办法]
报错了就贴异常
[解决办法]

package com.test;

import java.util.AbstractList;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Vector;

public class MovieStore {
private Hashtable movieList, actorList, typeList;

public Hashtable getMovieList() {
return movieList;
}

public Hashtable getActorList() {
return actorList;
}

public Hashtable getTypeList() {
return typeList;
}

public MovieStore() {


movieList = new Hashtable();
actorList = new Hashtable();
typeList = new Hashtable();
}

public String toString() {
return ("MovieStore with" + movieList.size() + "movies.");
}

public void addMovie(Movie aMovie) {
movieList.put(aMovie.getTitle(), aMovie);
if (!typeList.containsKey(aMovie.getType())) {
typeList.put(aMovie.getType(), new Vector<Movie>());
}
((Vector<Movie>) typeList.get(aMovie.getType())).add(aMovie);
for (String anActor : aMovie.getActors()) {
if (!actorList.containsKey(anActor)) {
actorList.put(anActor, new Vector<Movie>());
}
((Vector<Movie>) actorList.get(anActor)).add(aMovie);
}
}

public void removeMovie(Movie aMovie) {
movieList.remove(aMovie.getTitle());
((Vector) typeList.get(aMovie.getType())).remove(aMovie);
if (!((Vector) typeList.get(aMovie.getType())).isEmpty()) {
typeList.remove(aMovie.getType());
}
for (String anActor : aMovie.getActors()) {
((Vector<Movie>) actorList.get(anActor)).removeElement(aMovie);
if (!((Vector) actorList.get(anActor)).isEmpty()) {
actorList.remove(anActor);
}
}
}

public void removeMovie(String aTitle){
if(movieList.get(aTitle)==null){
System.out.println("No movie with that title");
}else{
removeMovie((Movie) movieList.get(aTitle));
}
}

private void removeMovie(Vector<Movie> vector) {
// TODO Auto-generated method stub

}

public void listMovies(){
Enumeration<String>titles=movieList.keys();
while(titles.hasMoreElements()){
System.out.println(titles.nextElement());
}
}

public void listMoviesWithActor(String anActor){
if(actorList.get(anActor)!=null){
Iterator<Movie>someMovies=((AbstractList<Movie>) actorList.get(anActor)).iterator();
while(someMovies.hasNext()){
System.out.println(someMovies.next());
}
}

}

public void listMoviesOfType(String aType){
Vector<Movie>someMovies=(Vector<Movie>) typeList.get(aType);
for(Movie m:someMovies){
System.out.println(m);
}
}
}



LZ,修改后的类。
遇到错误,你可以自己用debug as进行调试,一共有2个错误。
第一个是把vector强制转换成了hashTable,
public void removeMovie(Movie aMovie) {
movieList.remove(aMovie.getTitle());
((Vector) typeList.get(aMovie.getType())).remove(aMovie);
if (!((Vector) typeList.get(aMovie.getType())).isEmpty()) {
typeList.remove(aMovie.getType());
}
for (String anActor : aMovie.getActors()) {
((Vector<Movie>) actorList.get(anActor)).removeElement(aMovie);
if (!((Vector) actorList.get(anActor)).isEmpty()) {
actorList.remove(anActor);
}
}
}
 这个里面,
还有一个,就是在你删除陈强这个的时候,由于对应的白毛女和教育片上面已经删除,
之后获取他对应的电影的时候,为空,可你对于空进行了迭代,导致空指针异常。

public void listMoviesWithActor(String anActor){
if(actorList.get(anActor)!=null){
Iterator<Movie>someMovies=((AbstractList<Movie>) actorList.get(anActor)).iterator();
while(someMovies.hasNext()){
System.out.println(someMovies.next());


}
}

}


[解决办法]
typeList.get获取到的是Vector<Movie>,所以强转类型应该是Vector<Movie>
public void removeMovie(Movie aMovie) {
movieList.remove(aMovie.getTitle());
((Vector<Movie>) typeList.get(aMovie.getType())).remove(aMovie);//
if (!((Vector<Movie>)typeList.get(aMovie.getType())).isEmpty()) {//为什么我觉得这里应该是isEmpty()而不应该是!isEmpty()呢
typeList.remove(aMovie.getType());
}
for (String anActor : aMovie.getActors()) {
((Vector<Movie>) actorList.get(anActor)).removeElement(aMovie);//
if (!((Vector<Movie>) actorList.get(anActor)).isEmpty()) {//为什么我觉得这里应该是isEmpty()而不应该是!isEmpty()呢
actorList.remove(anActor);
}
}
}

热点排行