如何修复 java 中的堆栈溢出错误?
How to fix a stack overflow Error in java?
我有一部带有静态数组 Movie[] 电影的 class 电影。我实现了 Comparable 并重载了方法 compareTo。如果一部电影的喜欢与另一部电影的喜欢相同,那么我将它们按字母顺序进行比较。我必须创建一个快速排序实现来对一系列电影进行排序。但是在 return this.compareTo(m);
行我得到了一个堆栈溢出错误。我该如何解决这个问题?
public int compareTo(Movie m) {
if (this.likes == m.likes) {
//DefaultComparator cmp = new DefaultComparator();
return this.compareTo(m);
} else if (this.likes > m.likes) {
return 1;
} else {
return -1;
}
}
public static Movie[] sort(Movie[] m) {
if (m == null || m.length == 0) {
return null;
} else {
movies = m;
quicksort(0, movies.length - 1); // sort the entire array
return movies;
}
}
public static void quicksort(int left, int right) {
int i = left;
int j = right;
Movie pivot = movies[left + (right - left) / 2];
while (i <= j) {
while (movies[i].compareTo(pivot) == -1) {
i++;
}
while (movies[j].compareTo(pivot) == 1) {
j--;
}
if (i <= j) {
exch(i, j);
i++;
j--;
}
}
if (left < j) {
quicksort(left, j);
}
if (i < right) {
quicksort(i, right);
}
}
public static void exch(int i, int j) {
Movie temp = movies[i];
movies[i] = movies[j];
movies[j] = temp;
}
public int compareTo(Movie m) {
if (this.likes == m.likes) {
//DefaultComparator cmp = new DefaultComparator();
return this.compareTo(m);
} else if (this.likes > m.likes) {
return 1;
} else {
return -1;
}
}
如果this.likes == m.likes
returns为真,你会开始无限递归循环,毕竟'this'和'm'在下一次迭代中是相同的(s),它们的 m 值也将是。那是你的问题。
在
if (this.likes == m.likes) {
return this.compareTo(m);
}
compareTo
递归调用自己,会造成无限递归,只能以WhosebugError
.
结尾
您应该决定希望如何比较两个 Movie
对象,以防点赞数相等。将它们与 Movie
的另一个 属性 或 return 0
.
进行比较
我有一部带有静态数组 Movie[] 电影的 class 电影。我实现了 Comparable 并重载了方法 compareTo。如果一部电影的喜欢与另一部电影的喜欢相同,那么我将它们按字母顺序进行比较。我必须创建一个快速排序实现来对一系列电影进行排序。但是在 return this.compareTo(m);
行我得到了一个堆栈溢出错误。我该如何解决这个问题?
public int compareTo(Movie m) {
if (this.likes == m.likes) {
//DefaultComparator cmp = new DefaultComparator();
return this.compareTo(m);
} else if (this.likes > m.likes) {
return 1;
} else {
return -1;
}
}
public static Movie[] sort(Movie[] m) {
if (m == null || m.length == 0) {
return null;
} else {
movies = m;
quicksort(0, movies.length - 1); // sort the entire array
return movies;
}
}
public static void quicksort(int left, int right) {
int i = left;
int j = right;
Movie pivot = movies[left + (right - left) / 2];
while (i <= j) {
while (movies[i].compareTo(pivot) == -1) {
i++;
}
while (movies[j].compareTo(pivot) == 1) {
j--;
}
if (i <= j) {
exch(i, j);
i++;
j--;
}
}
if (left < j) {
quicksort(left, j);
}
if (i < right) {
quicksort(i, right);
}
}
public static void exch(int i, int j) {
Movie temp = movies[i];
movies[i] = movies[j];
movies[j] = temp;
}
public int compareTo(Movie m) {
if (this.likes == m.likes) {
//DefaultComparator cmp = new DefaultComparator();
return this.compareTo(m);
} else if (this.likes > m.likes) {
return 1;
} else {
return -1;
}
}
如果this.likes == m.likes
returns为真,你会开始无限递归循环,毕竟'this'和'm'在下一次迭代中是相同的(s),它们的 m 值也将是。那是你的问题。
在
if (this.likes == m.likes) {
return this.compareTo(m);
}
compareTo
递归调用自己,会造成无限递归,只能以WhosebugError
.
您应该决定希望如何比较两个 Movie
对象,以防点赞数相等。将它们与 Movie
的另一个 属性 或 return 0
.