Tengo una matriz, decir

int a[]={2,0,1,0,1,1,0,2,1,1,1,0,1,0,1};

Necesito anexar cada uno de los 5 vecinos elementos y asignarlos a un nuevo array b con length=(a.length/5); y quiero anexar el 5 de vecinos elementos, de forma que tengo:
int b[]={20101,10211,10101}; Necesito hacer esto por varias matrices de longitud, en la mayoría de los casos, con una longitud de a ser mayor de 15 años.

Cualquier ayuda sería muy apreciada, estoy de programación en Java.

Gracias de antemano.

  • Es esta tarea?
  • Entero de concatenación no necesariamente tienen sentido, por ejemplo, han considerado que la conducta que desea definir si los enteros son negativos?
  • ¿Qué desea que suceda cuando el primer elemento de cada 5-int-block es un 0? Si el resultado de 0,1,2,3,4 ser 01234 o 1234?
  • Necesito 01234, ya estoy usando esto para la codificación de los mensajes, tengo que mantener todos los 5 dígitos.
  • Véase también: stackoverflow.com/questions/2674707/…

5 Comentarios

  1. 4

    Es bastante straighforward:

    //Assuming a.length % 5 == 0.
    int[] b = new int[a.length / 5];
    for (int i = 0; i < a.length; i += 5) {
        b[i/5] = a[i]*10000 + a[i+1]*1000 + a[i+2]*100 + a[i+3]*10 + a[i+4];
    }
    • Si una.la longitud no dividir uniformemente por 5 la matriz no será lo suficientemente grande, y varias excepciones serán lanzados dentro del bucle for.
    • Gracias, que funciona bien, pero cuando estoy tratando con números enteros a partir de 0, con el método anterior, voy a perder el 0, por ejemplo: a={0,2,2,2,2,1,0,2,0,2}; me b={2222,10202}; en lugar de b={02222,10202}; que es lo que necesito. Cualquier forma de evitar que eso suceda?
    • la longitud de un siempre será divisible por 5, por lo que, afortunadamente, eso no será un problema.
    • Si desea mantener los ceros a la izquierda, no puede almacenar estos como los números enteros. El uso de Cadenas en lugar.
    • Si usted necesita para mantener los ceros a la izquierda, entonces b no puede ser un int[], porque los números no pueden tener ceros a la izquierda. Se podría hacer por ejemplo un String[].
    • gracias, sí, voy a utilizar una Cuerda para hacer eso, gracias a todos.

  2. 2

    Esto suena como una tarea de la pregunta, así que no voy a dar la solución completa, pero el resumen básico es:

    1. Calcular la longitud de b: len = un.longitud /5
    2. Construir b con muchos de sus elementos.
    3. Inicializar una variable de índice para que apunte al primer elemento de una
    4. Para cada elemento de b:
      • Construir el valor de un elemento de una[idx]…a[idx+4]
      • Avanzar el índice en un 5.

    También tenga en cuenta que usted puede necesitar para comprobar que la entrada es en realidad un múltiplo de 5 de longitud.

    • +1 por no dar la solución
  3. 1

    Esto funciona con (a.length % 5) != 0, y mantiene ceros a la izquierda (por el almacenamiento de los dígitos en String).

        int a[]={2,0,1,0,1,1,0,2,1,1,1,0,1,0,1,0,0,7};
    
        final int N = 5;
        String b[] = new String[(a.length + N - 1)/ N];
        StringBuilder sb = new StringBuilder(N);
        int x = 0;
        for (int i = 0; i < b.length; i++) {
            sb.setLength(0);
            for (int k = 0; k < N && x < a.length; k++) {
                sb.append(a[x++]);
            }
            b[i] = sb.toString();
        }
        System.out.println(java.util.Arrays.toString(b));
        //prints "[20101, 10211, 10101, 007]"

    Alternativamente, también puede usar regex:

        String[] arr =
            java.util.Arrays.toString(a)
            .replaceAll("\D", "")
            .split("(?<=\G.{5})");
        System.out.println(java.util.Arrays.toString(arr));
        //prints "[20101, 10211, 10101, 007]"

    Básicamente se utiliza Arrays.toString(int[]) anexar todos los dígitos en una larga String, a continuación, elimina todos los no-dígitos \D, a continuación, utiliza \Ganclada lookbehind dividir cada .{5}

  4. 0

    Enfoque ingenuo.

    import java.util.ArrayList;
    
    /* Naive approach */
    public class j2728476 {
        public static void main(String[] args) {
            int a[] = {2,0,1,0,1,1,0,2,1,1,1,0,1,0,1};
            ArrayList<String> al = new ArrayList<String>();
            String s = "";
            for (int i = 0; i < a.length; i++) {
                if (i % 5 == 0 && i != 0) {
                    al.add(s);
                    s = "" + a[i];
                } else {
                    s += a[i];
                }
            }
            al.add(s);
            for (String t : al) {
                //convert values to ints ...
                System.out.println(t);
            }
        }
    }

    Va a imprimir:

    20101
    10211
    10101
  5. 0
    import java.util.Arrays;
    public class MainClass {
    public static void main(String args[]) throws Exception {
    int array[] = { 2, 5, -2, 6, -3, 8, 0, -7, -9, 4 };
    Arrays.sort(array);
    printArray("Sorted array", array);
    int index = Arrays.binarySearch(array, 1);
    System.out.println("Didn't find 1 @ "
    + index);
    int newIndex = -index - 1;
    array = insertElement(array, 1, newIndex);
    printArray("With 1 added", array);
    }
    private static void printArray(String message, int array[]) {
    System.out.println(message
    + ": [length: " + array.length + "]");
    for (int i = 0; i < array.length; i++) {
    if (i != 0){
    System.out.print(", ");
    }
    System.out.print(array[i]);         
    }
    System.out.println();
    }
    private static int[] insertElement(int original[],
    int element, int index) {
    int length = original.length;
    int destination[] = new int[length + 1];
    System.arraycopy(original, 0, destination, 0, index);
    destination[index] = element;
    System.arraycopy(original, index, destination, index
    + 1, length - index);
    return destination;
    }
    }

    Se va a imprimir

    Sorted array: [length: 10]
    -9, -7, -3, -2, 0, 2, 4, 5, 6, 8
    Didn't find 1 @ -6
    With 1 added: [length: 11]
    -9, -7, -3, -2, 0, 1, 2, 4, 5, 6, 8

Dejar respuesta

Please enter your comment!
Please enter your name here