Java - ELIMINA ELEMENTO ARRAY SEGÚN VALOR

 
Vista:

ELIMINA ELEMENTO ARRAY SEGÚN VALOR

Publicado por Rafa (2 intervenciones) el 12/11/2018 11:04:30
/*Escribe una función “elimina1ElementoArray” a la que le pasas dos parámetros: un
array de enteros y un valor entero. La función eliminará del array el valor entero
independientemente de la posición en la que se encuentre. Si el valor se repite, se
eliminará sólo la primera vez que aparece el valor. La función nos devolverá un array
*/con el resultado.

Este es el motivo de mi consulta.
Se muetran muchas soluciones y formas de hacerlo, de las cuales he ido probando y no me salen bien. (Disculpen mi torpeza, estoy aprendiendo)

Les pego en código que hice, y les doy gracias por vuestro tiempo, paciencia y ayuda.... UN SALUDO A TODOS !!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public static int[] BorraDeArray(int[] a, int posicion)
{
    int[] copia = CopiaArrayPro(a);
    int i;
    for(i = posicion; i < a.length-1; i++)
    {
        copia[i] = copia[i + 1];
    }
    copia = Arrays.copyOf(copia, copia.length-1);
    return copia;
}
 
public static int[] Elimina1ElementoArray(int[] a, int valor)
{
    int[] copia = CopiaArrayPro(a);
    int i;
    for(i = 0; i < copia.length; i++)
    {
        if(copia[i] == valor)
        {
            BorraDeArray(copia, i);
            i = copia.length;
        }
    }
    return copia;
}
 
//--------------------<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>----------------------------
 
case 35:
{
    int[] a = {2,4,5,67,4,6,78};
    int valor = 4;
    int[] copia;
 
    EscribeArray(a);
    System.out.print(" < == > ");
    copia = Elimina1ElementoArray(a,valor);
    EscribeArray(copia);
}
break;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

ELIMINA ELEMENTO ARRAY SEGÚN VALOR

Publicado por Kabuto (1379 intervenciones) el 12/11/2018 20:25:36
Hola.
TE dejo aquí un código de como lo he hecho yo.

Incluye el método que se pide y un main() sencillito para ponerlo a prueba.

Parece que hay mucho código, pero en realidad la mayoría de líneas son comentarios explicando los pasos que se están siguiendo.
Cualquier duda, pregúntala por aquí.

Un saludo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
public final class Prueba {
 
	public static int[] elimina1ElementoArray(int[] array, int valor)
	{
		/*
		 * Primero, comprobamos si el valor existe en el array.
		 * Pues si no existe, no habrá que hacer nada, excepto
		 * devolver el array original sin modificarlo.
		 * De paso, podemos guardar la posicion donde hemos encontrado
		 * el valor, así luego sabremos que elemento debemos omitir si
		 * hay que modificar el array.
		 * Esta posicion la guardaremos en una variable llamada "omitir"
		 */
		int omitir = -1;//Inicializamos con un valor IMPOSIBLE en un array
		for (int i = 0; i < array.length; i++)
			if (array[i] == valor)
			{
				omitir = i;//La variable "omitir" solo varia si encontramos el valor a eliminar
				break;//"Rompemos" el bucle for, no es necesario que siga buscando.
			}
 
		//Comprobamos si lo hemos encontrado y obramos en consecuencia
 
		if (omitir == -1)//Conserva el valor IMPOSIBLE, por lo tanto, el valor a eliminar no existe en el array
			return array;//Devolvemos el array original sin ningún cambio.
		else
		{
			/*
			 * Si llegamos aquí, es que el valor a eliminar SÍ existe en el array y además
			 * tenemos su posicion detectada en la variable "omitir".
			 * Ahora tenemos que crear un array nuevo, siendo este un elemento más pequeño que el original.
			 * Copiaremos todos los valores, excepto el de la posicion que coincide con el valor de "omitir".
			 * Puesto que los dos arrays, el original y el nuevo modificado, tienen distintos tamaños, no podemos
			 * usar el mismo indice para recorrerlos. Así que usaremos dos indices independientes.
			 */
			int[] arrayModif = new int[array.length - 1];
			int indiceModif = 0;
			for (int i = 0; i < array.length; i++)
			{
				//La i del bucle for sera el indice para el array original
				if (i != omitir)//Si el indice es distinto de "omitir", entonces si copiamos el numero al nuevo array
				{
					arrayModif[indiceModif] = array[i];
					indiceModif++;//Incrementamos el indice del array modificado para apuntar a la siguiente posicion
				}
			}
			//Finalizado este bucle, ya hemos copiado todos los valores, excepto el de la posicion a "omitir".
			//Retornamos el nuevo array modificado
			return arrayModif;
		}
	}
 
	public static void main(String[] args) {
 
		int[] arrayPrueba = {12, 3, 4, 67, 2, 90};
		int valorEliminar = 4;
 
		//Mostramos array sin modificar
		System.out.print("Valores del array: ");
		for (int valor: arrayPrueba)
			System.out.print(valor + " ");
 
		System.out.println("\nVamos a eliminar: " + valorEliminar);
 
		arrayPrueba = elimina1ElementoArray(arrayPrueba, valorEliminar);
 
		//Comprobamos si se ha eliminado
		System.out.print("Valores del array: ");
		for (int valor: arrayPrueba)
			System.out.print(valor + " ");
 
	}
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

ELIMINA ELEMENTO ARRAY SEGÚN VALOR

Publicado por Rafa (2 intervenciones) el 13/11/2018 08:15:23
Muchísimas gracias por tu ayuda.... es todo un placer poder tratar con gente educada y dispuesta a prestar ayuda....
Me ayudaron mucho tus comentarios a entender el ejercicio.... "un millón de gracias"

Un saludo y que tengas un buen día !!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar