2011-09-27 4 views
0

Je trouve qu'il est un peu difficile d'obtenir un algorithme de recherche pour fonctionner correctement en Java. Fondamentalement, le programme a un tableau initialisé. L'utilisateur est supposé entrer un nombre via le clavier, et Java va les imprimer tous les index où ce nombre est trouvé. Mon principal problème réside dans le fait que je veux créer une méthode qui ressemble actuellement comme suit:Algorithme de recherche - Java

public static int[] linsearch(int[] numbers, int key) { 
     int[] indexvalues = null; 
     int n = 0; 
     for (int i = 0; i < numbers.length; i++) { 
      if (numbers[i] == key) { 
       indexvalues[n] = i; 
       n++;} 
     } 

     return indexvalues; 
    } 

L'idée sous-jacente est que, compte tenu d'un tableau, et un certain nombre (dans ce cas identifié par « clé »), le programme créera un nouveau tableau dans lequel les index de l'endroit où le nombre "clé" est trouvé dans le tableau original seront sauvegardés. Actuellement, j'obtiens ce message d'erreur: java.lang.NullPointerException. J'ai essayé différentes approches pour initialiser ce tableau, mais aucune n'a été couronnée de succès jusqu'ici. Ainsi, toute aide sera très appréciée!

+3

Ceci est une histoire, pas une question. Déboguer au point où vous avez l'exemple d'échec minimum. –

+0

OK. J'ai raccourci ma question. – Kristian

+0

Merci pour l'entrée. Je suis désolé, je suis encore très, très nouveau à la programmation (commencé il y a seulement 2 mois), alors pardonnez moi si mes questions ne sont parfois pas aussi élégantes que toutes les autres sur ce site. – Kristian

Répondre

3

La principale difficulté vient du fait que vous ne connaissez pas la taille du tableau de sortie à l'avance. D'un autre côté, développer un tableau Java au besoin est faisable, mais désagréable.

Il y a plusieurs façons de résoudre ce problème.

Si je vous étais, j'utiliser une collection pour stocker les indices:

public static Collection<Integer> linsearch(int[] numbers, int key) { 
    ArrayList<Integer> indexvalues = new ArrayList<Integer>(); 
    for (int i = 0; i < numbers.length; i++) { 
     if (numbers[i] == key) { 
      indexvalues.add(i); 
     } 
    } 
    return indexvalues; 
} 

Vous aurez besoin de modifier le code d'appel en conséquence. Je laisse cela comme un exercice pour le lecteur.