Eliminar un número determinado de un arreglo
Publicado por Ana (4 intervenciones) el 20/03/2020 10:14:59
Alguien que me pueda ayudar, necesito hacer un método que eliminé un número determinado en arreglos
Valora esta pregunta


-1
public Arreglo()
{
datos = new double[0];
}
public void Eliminar()
{
//Respaldar
double temp[] = new double[datos.length];
int c;
for(c=0; c<datos.length; c++);
{
temp[c] = datos[c];
}
//Rendimensionar el arreglo
datos = new double[datos.length - 1];
//Recuperar los numeros respaldados
for(c=0;c<temp.length-1; c++);
{
datos[c] = temp[c];
}
}
public class Arreglo {
static double[] arreglo;
public static void main(String[] args) {
//Inicializamos arreglo con 10 valores y los mostramos en pantalla
System.out.println("Valores existentes:");
arreglo = new double[10];
for (int i = 0; i < arreglo.length; i++) {
arreglo[i] = i;
System.out.print(arreglo[i] +" ");
}
System.out.println("\nEl arreglo tiene " + arreglo.length + " posiciones.");
System.out.print("\nElija una posicion a eliminar entre 0 y 9: ");
Scanner teclado = new Scanner(System.in);
int pos = teclado.nextInt();
teclado.close();
//Eliminamos posicion
eliminarPosicion(pos);
//Mostramos como ha quedado el arreglo
System.out.println("\nAhora el arreglo tiene " + arreglo.length + " posiciones.");
for (int i = 0; i < arreglo.length; i++)
System.out.print(arreglo[i] +" ");
}
static void eliminarPosicion(int pos) {
//Creamos nuevo arreglo con longitud reducida en 1
double[] temp = new double[arreglo.length - 1];
/*
* En este nuevo arreglo, copiamos todos los valores EXCEPTO la posicion indicada.
* Como los arreglos tienen distintas longitudes, usaremos dos indices distintos
*/
int indTemp = 0, indArreglo = 0;
while (indTemp < temp.length && indArreglo < arreglo.length) {
if (indArreglo == pos) //Esta posicion NO la copiamos, la saltamos.
indArreglo++; //Para saltarla, solo aumenta el indice del arreglo principal
else {
//Esta posicion si la vamos a copiar en el nuevo arreglo
temp[indTemp] = arreglo[indArreglo];
//Tras copiar, aumentan ambos indices
indTemp++;
indArreglo++;
}
}
//Elementos copiados excepto la posicion indicada. Asignamos el nuevo arreglo
arreglo = temp;
}
}
Valores existentes:
0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0
El arreglo tiene 10 posiciones.
Elija una posicion a eliminar entre 0 y 9: 4
Ahora el arreglo tiene 9 posiciones.
0.0 1.0 2.0 3.0 5.0 6.0 7.0 8.0 9.0
static void eliminarPosicion(int pos) {
double[] temp = new double[arreglo.length - 1];
int j = 0;
for (int i = 0; i < arreglo.length; i++) {
if(i != pos) {
temp[j++] = arreglo[i];
}
}
arreglo = temp;
}