2016-03-26 2 views
1

Я пытался использовать программу, в которой я использовал очередь приоритетов. Когда я делаю очередь приоритета частной, я получаю сообщение об ошибке говорящегоСоздание очереди приоритета дает ошибку в java

KthSmallestPQ.java:8: error: illegal start of expression 
      private PriorityQueue<MatrixElement> queue = new PriorityQueue<MatrixElement>(a[0].length, new Comparator<MatrixElement>() { 
      ^

код компилируется и работает, когда я удаляю частным. Может ли кто-нибудь объяснить, почему создание PQ private дает ошибку?

Вот код, который работает:

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

Убедитесь, что вы сделали правильный файл (сохраните его правильно). Потому что в исходном коде отсутствует символ 'private'. –

ответ

2

Вы не можете использовать access specifier на локальной переменной variable.The queue вы создали здесь является локальной переменной.

Смежные вопросы