2010-12-15 11 views
7

Tengo una matriz:java: matriz si todos lo mismo

int tarningar[] = new int[5]; 

que contiene números. Cuando todos los números son iguales, system.out.println ('ok');

¿Cómo puedo hacer esto?

+3

Suena como sea posible la tarea. ¿Qué has intentado? –

+0

if (tarningar [1] == tarningar [2] && tarningar [3] == tarningar [4]) .. pero entonces me falta tarningar [0] y esto no es tarea :) – Karem

+1

además de perder 'tarningar [0 ] 'que tampoco verifica si todos los elementos son iguales, solo comprueba si los elementos 1 y 2 son iguales y los elementos 3 y 4 son iguales. '{1, 2, 2, 3, 3}' pasaría esa prueba. – Jesper

Respuesta

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

Debería 'romper' si el indicador es falso, o agregarlo a la condición de bucle. – sje397

+2

Puede mejorarlo agregando '&& flag' después de' i <5'. –

+0

Bueno, gracias. – Karem

6

Todos los valores son los mismos es equivalente a Todos los valores son iguales a cualquier valor seleccionado.

Así que simplemente elija uno como referencia y compare este valor elegido con todos los demás valores.

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

Puedes comenzar con i = 1, de todos modos: el código es fácil de leer +1 – Ralph

+0

@Ralph sí, ¡tienes razón! –

+0

@Ralph si haces i = 1, entonces necesitas verificar si el tamaño de la matriz> 1, tal vez un elemento está presente en la matriz y este código fallará si i = 1 – Shadi

0

solución simple sin un bucle (y una longitud de la matriz fija 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

con Guava de Google:

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

Ingenioso para usar un conjunto para verificar si todos los valores son los mismos. No hubiera pensado en eso. –

1

En Java 8 con la API de flujo:

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

Si utilizó Integer[] en lugar de int[] la siguiente es compatible con Java 7 y antes:

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

Aquí hay un más sucinto de Java 8 corrientes ejemplo:

Arrays.stream(tarningar).distinct().count() == 1 
Cuestiones relacionadas