2009-12-24 10 views
1

i essayer de programmer sorte radix, mais je NullPointerException quand je lance ce codeproblème de tri?

public class ThreeRadixSort { 

    public Queue getSortedData(Queue queue){ 
     Queue array[] = new Queue[10]; 


     for(int i=1;i<=3;i++){ 

     while(queue.front != null){ 
      Student student = queue.dequeue(); 


      if(i == 1) 
       array[(int)(student.id%10)].enqueue(student); 
      else if(i == 2) 
       array[(int)((student.id%100)/10)].enqueue(student); 
      else  
       array[(int)(student.id/100)].enqueue(student); 

     } 

     for(int j=0;j<=9;j++){ 

     while(array[j] != null && array[j].front != null) 
      queue.enqueue(array[j].dequeue()); 
     } 
     } 
     return queue; 
    } 
} 

Le spectacle d'exception lorsque la mise en œuvre portée à

array[(int)(student.id%10)].enqueue(student); 

Répondre

2

Le problème est que lorsque vous initialisez votre tableau de Queue, chaque point est initialisé à null. Donc maintenant, vous essayez d'appeler la méthode enqueue sur null. Vous devez faire une boucle sur chaque position du tableau et lui affecter un new Queue() ou bien vous l'initialisez.

Ainsi, par exemple:

for (int i = 0; i < array.length; i++) { 
    array[i] = new Queue(); 
} 
+0

Thanx, problème résolu – wasim

+0

Vous êtes les bienvenus - cela vous dérangerait modding jusqu'à/accepter cette réponse si elle a travaillé pour vous? – danben

+0

oK ..i fait ceci – wasim

1

cette ligne:

Queue array[] = new Queue[10] 

déclare seulement un tableau de files d'attente. Il n'alloue pas les files d'attente lui-même. vous devez les initialiser comme ceci:

for(int i; i<10; i++) 
{ 
     array[i] = new Queue(); 
} 

P.S. au fait. Au lieu de compter sur un nombre magique comme '10', il est préférable d'en faire une constante et de la déclarer en haut de votre programme. Comme par exemple:

const int numElements = 10; 
+0

J'aurais tendance à être d'accord avec votre affirmation sur les nombres magiques, sauf quand la constante ne peut jamais changer - alors j'ai l'impression que cela diminue la lisibilité (puisqu'elle suggère au lecteur qu'elle pourrait changer). Dans ce cas, le seul moyen de modifier son nombre de files d'attente est de mettre en œuvre l'algorithme dans une base autre que 10, ce qui semble improbable. – danben

+0

merci, problème résolu – wasim

+0

J'aurais tendance à votre idée, danben – wasim