2010-12-15 7 views
7

J'ai un tableau:java: tableau si tous les mêmes

int tarningar[] = new int[5]; 

qui détient des chiffres. Quand tous les nombres sont identiques, system.out.println ('ok');

Comment est-ce que je peux faire ceci?

+3

Sons comme les devoirs possibles. Qu'avez-vous essayé? –

+0

si (tarningar [1] == tarningar [2] && tarningar [3] == tarningar [4]) .. mais alors il me manque tarningar [0] et ce n'est pas devoirs :) – Karem

+1

en plus manquant 'tarningar [0 ] 'qui ne vérifie pas non plus si tous les éléments sont identiques - il vérifie seulement si les éléments 1 et 2 sont identiques et les éléments 3 et 4 sont identiques. '{1, 2, 2, 3, 3}' réussirait ce test. – Jesper

Répondre

14
boolean flag = true; 
int first = tarningar[0]; 
for(int i = 1; i < 5 && flag; i++) 
{ 
    if (tarningar[i] != first) flag = false; 
} 
if (flag) System.out.println("ok"); 
+1

Vous devriez «casser» si le drapeau devient faux - ou l'ajouter à la condition de boucle. – sje397

+2

Vous pouvez l'améliorer en ajoutant '&& flag' après' i <5'. –

+0

Sympa, merci. – Karem

6

Toutes les valeurs sont les mêmes est équivalente à Toutes les valeurs sont égales à une valeur sélectionnée.

Alors choisissez-en un comme référence et comparez cette valeur à toutes les autres valeurs.

16
public class EqualArrayTest { 

    public static boolean isAllEqual(int[] a){ 
     for(int i=1; i<a.length; i++){ 
      if(a[0] != a[i]){ 
       return false; 
      } 
     } 

     return true; 
    } 

    public static void main(String[] args){ 
     System.out.println(isAllEqual(new int[]{2,2,2})); 
     System.out.println(isAllEqual(new int[]{2,2,1})); 
    } 
} 
+0

Vous pouvez commencer avec i = 1, de toute façon: le code est facile à lire +1 – Ralph

+0

@Ralph oui, vous avez raison! –

+0

@Ralph si vous faites i = 1 alors vous devez vérifier si la taille du tableau> 1, peut-être un élément est présent dans le tableau et ce code échouera si le i = 1 – Shadi

0

solution simple sans une boucle (et une longueur de réseau fixe de 5):

int v = tarningar[0]; 

if (tarningar[1] == v && tarningar[2] == v && tarningar[3] == v && tarningar[4] == v) { 
    System.out.println("All the same!"); 
} 
1
boolean isSame = true; 

for(int i = 1; i < tarningar.length; i++) { 
    if (tarningar[i] != tarningar[0]) { 
     isSame = false; 
    } 
} 

if (isSame) { 
    System.out.println("OK"); 
} 
4
import java.util.Arrays; 

/** 
* Don't take it serious. 
* But it works. 
*/ 
public class Demo { 

    public static boolean isAllSame(int... numbers) { 
     int[] firstItemArray = new int[numbers.length];   
     Arrays.fill(firstItemArray, numbers[0]); 

     return Arrays.equals(numbers, firstItemArray); 
    } 

    public static void main(String[] args) { 
     System.out.println(isAllSame(1,1,1,1)); 
     System.out.println(isAllSame(1,1,1,2)); 
    } 
} 
8

avec Guava Google:

boolean allEqual = Sets.newHashSet(Ints.asList(tarningar)).size() == 1; 
+1

Génial d'utiliser un ensemble pour vérifier si toutes les valeurs sont les mêmes. Je n'aurais pas pensé à ça. –

1

En Java 8 avec l'API de flux:

Set<Integer> uniqueValues = Arrays.stream(tarningar) 
    .boxed() 
    .collect(Collectors.toSet()); 
boolean allEqual = uniqueValues.size() == 1; 

Si vous avez utilisé Integer[] au lieu de int[] ce qui suit est pris en charge dans Java 7 et avant:

// Integer[] tarninagr = ... 
Set<Integer> uniqueValues = new HashSet<>(Arrays.asList(tarningar)); 
boolean allEqual = uniqueValues.size() == 1;  
0

Voici un exemple plus succinct Java 8 flux:

Arrays.stream(tarningar).distinct().count() == 1 
Questions connexes