【发布时间】:2013-07-14 11:38:45
【问题描述】:
这个方法应该传递一个对象数组:
Movie[] movieList = new Movie[6];
movieList[0] = new Drama("Titanic","James Cameron", 1997, 200.0, 80.0, 7.50);
movieList[1] = new Drama("Fight Club", "David Fincher", 1999, 63.0, 30.0, 6.50);
movieList[2] = new Animated("Spirited Away", "Hayao Miyazaki", 2001, 19.1, 2.0, 30.0);
movieList[3] = new Animated("Toy Story", "John Lassater", 1995, 30.0, 3.5, 200.0);
movieList[4] = new Documentary("Super Size Me","Morgan Spurlock", 2004, 0.006, 35, .005);
movieList[5] = new Documentary("Jiro Dreams", "David Gelb", 2011, 0.003, 26, .002);
并且应该按电影的标题组织和搜索。 但是,每次我尝试使用 switch 语句将对象传递给方法时:
case 3:
System.out.println("Please input the movie you are searching for:");
key = input.nextLine();
key = input.nextLine();
if(searchMovies(movieList, key)== -1)
{
System.out.println("There is no match found for movie with title " + key);
}
else
{
index = (searchMovies(movieList, key));
System.out.println(movieList[index].toString());
System.out.println("\n");
}
break;
所有返回的要么是负数 1,它告诉我找不到密钥, 或者说数组索引超出范围的错误。 这是包含冒泡排序和二分搜索方法的 searchMovies 方法
/*-------------------------------------------------------------------------
//searchMovies first sorts the array of objects by title through Bubble
//Sort and then searches the array using Binary Search for the users
//key.
-------------------------------------------------------------------------*/
public static int searchMovies(Movie[] movieList, String key)
{
//Bubble Sort the titles
boolean needNextPass = true;
Movie temp;
for(int pass=1; pass<movieList.length && needNextPass; pass++)
{
needNextPass = false; // Array may be sorted and next pass not needed
for(int x=0; x<movieList.length-pass; x++)
if(((Profitable) movieList[x]).calcProfit() < ((Profitable) movieList[x+1]).calcProfit()) /** compare rental fee */
{
temp = movieList[x];
movieList[x] = movieList[x+1];
movieList[x+1] = temp;
needNextPass = true; // Next pass still needed
}
}//end for
//Binary search for key
int first = 0;
int last = movieList.length;
while (first <= last) {
int mid =(first + last) / 2; // Compute mid point.
if (key.compareTo(movieList[mid].getTitle()) < 0) {
last = mid; // repeat search in bottom half.
} else if (key.compareTo(movieList[mid].getTitle()) > 0) {
first = mid + 1; // Repeat search in top half.
} else {
return mid; // Found it. return position
}//end if
}//end loop
return -1; // Failed to find key
}//end searchMovies'
【问题讨论】:
-
你为什么给
key=input.nextLine();打了两次电话? -
要做的第一件事:将冒泡排序从二分搜索中分离出来。然后您可以轻松地分别测试每个。
-
你为什么要扫描输入两次
Key=input.nextLine()?
标签: java arrays sorting search binary