[英]Java Insertion Sort not sorting
public static void main(String[] args)
{
Movies2[] movies = new Movies2[10];
movies[0] = new Movies2("The Muppets Take Manhattan", 2001, "Columbia Tristar");
movies[1] = new Movies2("Mulan Special Edition", 2004, "Disney");
movies[2] = new Movies2("Shrek 2", 2004, "Dreamworks");
movies[3] = new Movies2("The Incredibles", 2004, "Pixar");
movies[4] = new Movies2("Nanny McPhee", 2006, "Universal");
movies[5] = new Movies2("The Curse of the Were-Rabbit", 2006, "Aardman");
movies[6] = new Movies2("Ice Age", 2002, "20th Century Fox");
movies[7] = new Movies2("Lilo & Stitch", 2002, "Disney");
movies[8] = new Movies2("Robots", 2005, "20th Century Fox");
movies[9] = new Movies2("Monsters Inc.", 2001, "Pixar");
printMovies(movies);
sortTitle(movies, 1);
printMovies(movies);
//sortYear(movies, 2);
//printMovies(movies);
//sortStudio(movies, 1);
//printMovies(movies);
}
public static void printMovies(Movies2[] list)
{
for(int i = 0; i < list.length; i++)
System.out.println(list[i]);
}
public static Movies2[] sortTitle(Movies2[] source, int direction)
{
Movies2[] dest = new Movies2[ source.length ];
if(direction == 1)
{
System.out.println("Sort by Title - ascending");
for ( int i = 0 ; i < source.length ; i++ )
{
Movies2 next = source[i];
int insertindex = 0;
int k = i;
while ( k > 0 && insertindex == 0 )
{
if ( next.getTitle().compareTo(dest[k-1].getTitle()) > 0 )
{
insertindex = k;
}
else
{
dest[ k ] = dest[ k - 1 ];
}
k--;
}
dest[ insertindex ] = next;
}
}
else if( direction == 2)
{
System.out.println("Sort by Title - descending");
for ( int i = 0 ; i < source.length ; i++ )
{
Movies2 next = source[ i ];
int insertindex = 0;
int k = i;
while ( k > 0 && insertindex == 0 )
{
if ( next.getTitle().compareTo(dest[k-1].getTitle()) < 0 )
{
insertindex = k;
}
else
{
dest[ k ] = dest[ k + 1 ];
}
k--;
}
dest[ insertindex ] = next;
}
}
else
{
dest = source;
}
return dest;
我的電影陣列中有這段代碼。 在movies類中,所有參數都有getter方法。 當我嘗試使用數字2(降序選擇)運行此代碼時,它給我一個空錯誤。 當我嘗試使用1進行升序時,它不會對其進行排序。
問題在這里
if (next.getTitle().compareTo(dest[k - 1].getTitle()) > 0) {
可能是next.getTitle()
為null
。 標題設置不正確。
嘗試使用以下簡單方法對數組進行排序:
public static void sort(Movies2[] numbers, boolean ascending) {
Movies2 tempVar = null;
for (int i = 0; i < numbers.length; i++) {
for (int j = 1; j < numbers.length - i; j++) {
int diff = numbers[j - 1].getTitle().compareTo(numbers[j].getTitle());
if ((ascending && diff > 0) || (!ascending && diff < 0)) {
tempVar = numbers[j - 1];
numbers[j - 1] = numbers[j];
numbers[j] = tempVar;
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.