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 dedifferentValuesUnsorted
, 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.
Vous devez vous connecter pour publier un commentaire.
C'est en fait beaucoup plus simple que la plupart des gens l'ont fait pour l'être, cette méthode fonctionne parfaitement bien:
Laissez-moi vous guider à travers elle:
1) Fournir un tableau int en paramètre.
2) Créer une liste de tableaux qui tiendra entiers:
fournie en paramètre, puis ajouter cet élément dans le tableau de paramètre
au tableau liste
N. B: Cela signifie que l'ArrayList contient tous les nombres dans l'int[], et supprime les numéros répétés.
3) La taille de la liste de tableaux (qui est analogue à la propriété length d'un tableau) sera le nombre de valeurs différentes dans le tableau fourni.
Procès
Entrée:
Sortie: 6
D'abord créer une valeur distincte de tableau, Il suffit d'en créer à l'aide de
HashSet
.Puis
alreadyPresent.size()
fournira nombre de valeurs différentes. Mais pour les cas comme celui -{3,3,3} = 0
(tableau contient les mêmes éléments); la sortie dealreadyPresent.size()
est 1. Pour utiliser ce filtre simpleCode suivant donne le nombre de valeurs différentes.
Vous pouvez utiliser un
HashSet
, qui ne peut contenir que des éléments uniques. LeHashSet
va supprimer les éléments dupliqués et vous pouvez obtenir la taille de l'ensemble.HashSet
à ma connaissance serait de 3 et de 4 autres, et votre code de retour de 2, non pas à 0Pour les petits tableaux, c'est rapide et concis méthode qui ne nécessite pas l'allocation supplémentaire temporaire d'objets:
Essayez ceci:
d'entrée:{1,1,1,1,1} - de sortie: 0
d'entrée:{1,2,3,1} - de sortie: 3
Essayez ceci... c'est assez simple en utilisant l' ArrayList. Vous n'avez même pas besoin de deux boucle. Aller sur
Essayez ce simple extrait de code.
L'utilisation d'un ensemble de supprimer les doublons
HashSet
a un constructeur qui prend un tableau deint
s.