Le comte différentes valeurs dans le tableau en Java

Je suis en train d'écrire un code où j'ai un int[a] et la méthode doit retourner le nombre de valeurs uniques. Exemple: {1} = 0 valeurs différentes, {3,3,3} = 0 valeurs différentes, {1,2} = 2 valeurs différentes, {1,2,3,4} = 4 valeurs différentes, etc. Je ne suis pas autorisé à trier le tableau.

Le truc c'est que ma méthode ne fonctionne pas, probablement. Il ya quelque chose de mal avec ma déclaration et je ne peux pas le comprendre.

public class Program
{

    public static void main(String[] args)
    {
        int[] a = {1, 2, 3, 1};

        System.out.println(differentValuesUnsorted(a));
        //run: 4 //should be 3
    }

public static int differentValuesUnsorted(int[] a)
{
    int values;      //values of different numbers

    if (a.length < 2)
    {
        return values = 0;
    }else if (a[0] == a[1])
    {
        return values = 0;
    }else
    {
        values = 2;
    } 

    int numberValue = a[0];
    for (int i = a[1]; i < a.length; i++)
    {
        if (a[i] != numberValue)
        {
             numberValue++;
             values++;
        }
    }
        return values;
    }
}

Quelqu'un peut-il aider?

  • Ce code est mal formaté et même pas praticable. Assurez-vous que votre programme n'a pas toutes les erreurs de compilation, et qu'il est correctement formaté avant de poster.
  • ceux if else-if else des déclarations au sommet de differentValuesUnsorted, sont-ils juste pour un tableau qui a une longueur de moins de 2, ou devraient-ils être en passant par des tableaux qui ont plus d'un int stockée en eux?
  • Votre boucle for est également mauvaise. ce qui se passe si a[1] a une valeur plus grande que la longueur de la matrice? AIOOB erreur se produit
  • J'ai peut-être mal compris la tâche, mais il est dit (traduit de l'anglais): Si le tableau est vide (a longueur de 0), la méthode doit retourner 0 car il n'y a 0 différentes valeurs dans un tableau vide. J'ai pensé que cela signifie que si la matrice a, par exemple, une valeur de type int[] a = {2} il n'y a pas de valeurs différentes. Donc, avec le if/else-if/else j'ai essayé de faire en sorte que les résultats deviennent: int[] a = {2} => 0 des valeurs différentes, int[] a = {2,2} => 0 des valeurs différentes, mais int[] a = {1,2} => 2 valeurs différentes.
  • attention cependant, si la matrice, d'une longueur de 2 ou plus, pour notre but, disons de plus de 2, 3, frappe le else if(a[0] == a[1]) ligne, et les 2 premiers entiers sont les mêmes, il sera de retour 0, alors il devrait être de 2, et votre pour-boucle a encore un problème
  • vous êtes correct. Besoin de chercher plus loin dans ce demain.

InformationsquelleAutor Wiswas | 2015-09-07