我正在尝试使用优先级队列的程序。当我将优先级队列设为私有时,我收到错误消息
KthSmallestPQ.java:8: error: illegal start of expression
private PriorityQueue<MatrixElement> queue = new PriorityQueue<MatrixElement>(a[0].length, new Comparator<MatrixElement>() {
^
当我删除私有代码时,代码会编译并运行。有人可以解释为什么让PQ私有化会出错吗?
以下是有效的代码:
import java.util.*;
class KthSmallestPQ {
public static int findKthLow(int[][] a, int k) {
if(k < 0 || k >= a.length * a[0].length)
return Integer.MAX_VALUE;
PriorityQueue<MatrixElement> queue = new PriorityQueue<MatrixElement>(a[0].length, new Comparator<MatrixElement>() {
public int compare(MatrixElement first, MatrixElement second) {
return first.value - second.value;
}
});
for(int i = 0; i < a[0].length; i++)
queue.add(new MatrixElement(a[0][i], 0, i));
MatrixElement lowest = null;
for(int i = 0; i < k; i++) {
lowest = queue.remove();
// add element from the next row of same column to the priority queue
int row = lowest.row + 1;
int col = lowest.col;
if(row < a.length)
queue.add(new MatrixElement(a[row][col], row, col));
else
queue.add(new MatrixElement(Integer.MAX_VALUE, row, col));
}
return lowest.value;
}
public static void main(String[] args) {
int[][] matrix = {{10, 20, 30, 40},
{15, 25, 35, 45},
{24, 29, 37, 48},
{32, 33, 39, 50}};
int k = 6;
System.out.println(k + "th smallest value is: " + findKthLow(matrix, k));
}
}
class MatrixElement {
int value;
int row;
int col;
MatrixElement(int value, int row, int col) {
this.value = value;
this.col = col;
this.row = row;
}
}
答案 0 :(得分:2)
你不能在局部变量上使用access specifier
。你在这里创建的变量queue
是局部变量。