Programa Java para dividir una array desde una posición especificada

Dada una array de tamaño N , nuestro trabajo es dividir la array en una posición específica especificada por el usuario. También se discutirán los casos límite.  

Considere el siguiente ejemplo. 

Split an Array from Specified Position

Del ejemplo anterior, sea A la array original que queremos dividir. Sea N la longitud de la array A (N = 10) y sea pos la posición que queremos dividir. En el ejemplo anterior pos = 5 . Todos los elementos antes de esta posición, es decir; del índice 0 al 4 se dividirá en una array, mientras que los elementos del índice 5 al 10 se dividirán en la última parte, etiquetada como B y C respectivamente. Pero si la posición es 0 o mayor que N , entonces no se puede dividir la array y se muestra el mensaje de posición no válida.

Ejemplos:

 Entrada : A[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}

           posición = 5

Salida : B[] = { 1, 2, 3, 4, 5}

             C[] = { 6,7,8,9,0}

Entrada: A[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}

         posición = -1

Salida:  posición no válida 

Entrada: A[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}

        posición = 20

Salida:  posición no válida

Método 1: en el primer método, usaremos dos bucles for. Este enfoque es un método bastante sencillo.

  • Paso 1: primero aceptamos el valor de pos del usuario
  • Paso 2: declaramos dos arreglos B y   C que tienen tamaño pos y N – pos respectivamente.
  • Paso 3: Luego tenemos dos bucles, el primer bucle se ejecuta desde 0 – pos inicializando la array B , mientras que el segundo ciclo se ejecuta desde 0 a N – pos inicializando la array C.

También hemos agregado un método auxiliar pprint() que acepta una array y la imprime. También tenemos una instrucción if que verifica el valor pos válido.

Ejemplo:

Java

import java.util.*;
 
public class SplittingArray1 {
 
    // this method accepts a array and prints the value
    static void pprint(int arr[])
    {
        for (int var : arr) {
            System.out.print(var + " ");
        }
 
        System.out.println();
    }
 
    public static void main(String args[])
    {
        // original array
        int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
 
        // size of array
        int n = a.length;
 
        // accepting the value of position from the user
 
        Scanner scanner = new Scanner(System.in);
 
        System.out.println("Enter position to split.");
 
        int pos = scanner.nextInt();
 
        // validating the position for invalid values.
        if (pos > 0 && pos < n) {
            // method  1 : using two for loops
 
            // declaring array B and C
            int b[] = new int[pos];
            int c[] = new int[n - pos];
 
            // initializing array B
            for (int i = 0; i < pos; i++) {
                b[i] = a[i];
            }
 
            // initializing array C
            for (int i = 0; i < n - pos; i++) {
                c[i] = a[i + pos];
            }
 
            // printing the array b and c
 
            pprint(b);
            pprint(c);
        }
 
        else {
            System.out.println("Invalid position.");
        }
    }
}
Producción

Enter position to split.
Invalid position.

Método 2: en este método, en lugar de usar dos bucles for, intentamos implementar el mismo programa usando solo uno. 

  • Los pasos 1  y 2 son similares al método 1
  • Paso 3: ejecutamos un ciclo for de 0 a N – 1
 if index < pos 
   we initialize array B 
 else if pos >index 
   we initialize array C 

Ejemplo:

Java

import java.util.Arrays;
import java.util.Scanner;
 
public class SplittingArray2 {
 
    // this method accepts a array and prints the value
    static void pprint(int arr[])
    {
        for (int var : arr) {
            System.out.print(var + " ");
        }
 
        System.out.println();
    }
 
    public static void main(String args[])
    {
 
        // original array A
        int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
 
        int n = a.length;
 
        Scanner scanner = new Scanner(System.in);
 
        System.out.println("Enter position to split.");
 
        int pos = scanner.nextInt();
 
        if (pos > 0 && pos < n) {
            // method  2 : using only one forloop
 
            int b[] = new int[pos];
            int c[] = new int[n - pos];
 
            // only using one for loop to solve the problem.
            for (int i = 0; i < n; i++) {
 
                if (i < pos)
                    b[i] = a[i];
                else
                    c[i - pos] = a[i];
            }
 
            // printing the array b and c
 
            pprint(b);
            pprint(c);
        }
 
        else {
            System.out.println("Invalid position.");
        }
    }
}
Producción

Enter position to split.
Invalid position.

Método 3: 

Este es el método más corto. En este método, usamos el método incorporado Arrays.copyOfRange() .

public static short[] copyOfRange(short[] original, int from, int to)

   original : esta es la array desde la cual se copiará un rango.

   from : este es el índice inicial del rango que se va a copiar, inclusive.

   to − Este es el índice final del rango a copiar, exclusivo.

Ejemplo:

Java

import java.util.Arrays;
import java.util.Scanner;
 
public class SplittingArray3 {
 
    static void pprint(int arr[])
    {
        for (int var : arr) {
            System.out.print(var + " ");
        }
 
        System.out.println();
    }
 
    public static void main(String args[])
    {
        int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
 
        int n = a.length;
 
        Scanner scanner = new Scanner(System.in);
 
        System.out.println("Enter position to split.");
 
        int pos = scanner.nextInt();
 
        if (pos > 0 && pos < n) {
 
            // method  3 : using  Arrays.copyOfRange()
 
            int b[] = new int[pos];
            int c[] = new int[n - pos];
 
            // initializing array B by copying values from
            // index 0  to pos - 1
            b = Arrays.copyOfRange(a, 0, pos);
 
            // initializing array B by copying values from
            // index pos  to n - 1
            c = Arrays.copyOfRange(a, pos, n);
 
            // printing the array b and c
 
            pprint(b);
            pprint(c);
        }
 
        else {
            System.out.println("Invalid position.");
        }
    }
}
Producción

Enter position to split.
Invalid position.

Complejidad de tiempo: O(n)

Complejidad espacial: O(n)

Publicación traducida automáticamente

Artículo escrito por clivefernandes777 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *