2012-05-14 10 views
8

¿Hay una manera simple de verificar sin bucles si una matriz de bytes en java tiene todos los 0xFF como valores?Comprueba si la matriz de bytes está en 0xff

ejemplo

byte[] b = new byte[]{ 0xff, 0xff, 0xff, 0xff, 0xff }; 

if (b is all 'ff') 
    process? 
+3

bien en C que se p ... .. oh sí, esto es Java :) Lamentablemente, No creo que eso sea posible (+1 para el elemento similar a la lista de deseos). –

+0

sin bucles ?? ¡¡No!! – WickeD

+0

@JacoVanNiekerk: ¿cómo lo harías en C sin bucle? La única forma en que podría pensar requeriría 'b' ser de tamaño fijo y" pequeño ". –

Respuesta

3

Si no les gusta bucle, el uso de la recursividad :)

public static void test1() { 
    class Chk { 
     boolean c(int [] b, int val, int pos) { 
      if (pos >= b.length) { 
       return true; 
      } 
      if (b[pos] != val) { 
       return false; 
      } 
      return c(b, val, pos + 1); 
     } 
    } 
    Chk test = new Chk(); 

    System.out.println(test.c(new int [] {0xff, 0xff}, 0xff, 0)); 

    System.out.println(test.c(new int [] {0xff, 0xff, 0xff, 0xfe}, 0xff, 0)); 

    System.out.println(test.c(new int [] {0x01, 0x01, 0x01, 0x01}, 0xff, 0)); 

    System.out.println(test.c(new int [] {0x01, 0x01, 0x01, 0x01}, 0x01, 0)); 
} 
+0

¡Pero la recursividad es solo un bucle disfrazado! (¡Así como el bucle es solo una recursión enmascarada!) –

+0

Depende de cómo se defina el bucle :) – DRCB

4

No hay manera de hacerlo en cualquier idioma sin bucles (ya sea explícita o recursivas). Incluso si su CPU tiene una instrucción especial para verificar el área de memoria de un patrón, se activará internamente. Entonces tu pregunta realmente no tiene sentido.

Si usted está pidiendo una manera eficaz de hacer esto, hay maneras:

  • Si sus matrices siempre tienen la misma longitud, se puede configurar un constante y utilizar Arrays.equals(). Si tiene varias longitudes diferentes pero solo una pequeña cantidad de diferentes, puede crear varias constantes.

  • Puede ordenar la matriz y verificar el primer y último valor. Si son iguales, todos los valores entre deben ser -1 también.

  • Puede mover la verificación a un método, lo que significa que el "bucle de verificación" no ocupa el código en un lugar importante.

  • Puede utilizar JNI para acceder al código del ensamblador, que a su vez utiliza instrucciones especiales.

  • Otros idiomas ofrecen mejor soporte para cosas como esta. En maravilloso, que puede hacer idea b.size() == b.count { it == -1 }

1

loco, puede hacerlo con la cadena que coincide con

int[] b = new int[]{0xff, 0xff, 0xff, 0xff, 0xff}; 
String arr = Arrays.toString(b).replaceAll(", ", ""); 
String match = "\\[("+new Integer(0xff).toString()+")+\\]"; 
System.out.println(arr); 
System.out.println(match); 
System.out.print(arr.matches(match)); 
Cuestiones relacionadas