Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: 0916 en 14 de Octubre 2021, 18:04

Título: Java NetBeans programa para manejo de arreglos insertar crear actualizar elimina
Publicado por: 0916 en 14 de Octubre 2021, 18:04
Hola, quería pedir ayuda para solucionar este ejercicio.

Crea un un proyecto en netbeans con el siguiente menú

MENÚ


Tengo este código:

Código: [Seleccionar]
package ejem;

import java.util.*;

public class Ejem {

    public static void main(String[] args) {
        System.out.println("MENU");
        System.out.println("Insertar un elemento al arreglo");
        System.out.println("Crear un arreglo");
        System.out.println("actualizar posiciones del arreglo");
        System.out.println("Eliminar un valor del arreglo");

        Scanner leer = new Scanner(System.in);

        int posicion = 0;

        System.out.println("Dame el tamaño del arreglo: ");

        posicion = leer.nextInt();

        String[] arreglo = new String[posicion];

        for (int x = 0; x < arreglo.length; x++) {
            System.out.print("Dame el valor en la posicion" + x);

            arreglo[x] = leer.next();
        }

        System.out.println("estos son los valores que insertartaste");
        for (int x = 0; x < arreglo.length; x++) {
            System.out.println(arreglo[x]);
        }
        System.out.println("Quieres actualizar alguno? S/N");
        String respuesta=leer.next();
       
        int posicion_actualizar=0;
        if(respuesta.equals("S"))
        {
            System.out.println("que posicion del arreglo quieres actualizar?");
           
            posicion_actualizar=leer.nextInt();
           
            System.out.println("Escribe el nuevo valor en la poscion "+ posicion_actualizar);
            arreglo[posicion_actualizar]=leer.next();
        }
       
        System.out.println("Este es el arreglo actualizado");
       
           for(int x=0;x<arreglo.length;x++)
        {
            System.out.println(arreglo[x]);
        }   
        System.out.println("Este es el arreglo actualizado");
       
           for(int x=0;x<arreglo.length;x++)
        {
            System.out.println(arreglo[x]);
        }   
        for (int x = 0; x < arreglo.length; x++) {
            System.out.println("[" + x + "]=" + arreglo[x]);
        }
       
        System.out.println("tu arreglo es de " + arreglo.length + " posiciones");
        System.out.println("Que valor quieres eliminar de tu arreglo?");

        posicion = leer.nextInt();

        for (int x = posicion; x < arreglo.length - 1; x++) {
            arreglo[x] = arreglo[x + 1];
        }

        arreglo[arreglo.length - 1] = "";
        System.out.println("Arreglo modificado");
        for (int x = 0; x < arreglo.length; x++) {
            System.out.println("[" + x + "]=" + arreglo[x]);
            System.out.print("Dame el valor en la posicion" + x);

            arreglo[x] = leer.next();

        }

    }
}
Título: Re: Me pueden ayudar
Publicado por: Kabuto en 15 de Octubre 2021, 00:23
Hola.

Sería necesario que el menú se repita continuamente hasta que el usuario decida terminar el programa.
Se le pide opción al usuario y con un swith evaluamos que opción ha escogido.

Cada opción puede escribirse en un método separado, para facilitar las cosas, el arreglo y el Scanner para pedir datos por teclado pueden declararse como atributos de ámbito global.

Así, todos los métodos que vayamos a crear, tendrán acceso directo a estos atributos y podrán trabajar con ellos.

Pongo un ejemplo rápido, donde solo he creado alguna de las opciones del menú.
Si comprendes la forma en la que he estructurado el programa, intenta tú crear las otras opciones del menú que faltan por escribir.
Y luego cuando tenga más tiempo, te ayudo a corregir o completar lo que sea.

Código: [Seleccionar]
public class Menu {

private static String[] arreglo;
private static Scanner teclado = new Scanner(System.in);

public static void main(String[] args) {

int opcion = 0;

do {
System.out.println("\n\n\t\tMENU");
System.out.println("(1) - Insertar un elemento al arreglo");
System.out.println("(2) - Crear un arreglo");
System.out.println("(3) - actualizar posiciones del arreglo");
System.out.println("(4) - Eliminar un valor del arreglo");
System.out.println("(5) - Visualizar valores del arreglo");
System.out.println("(9) - TERMINAR PROGRAMA");
System.out.print("Elija opción: ");
opcion = Integer.parseInt(teclado.nextLine());

switch(opcion) {
case 1:
insertarElemento();
break;
case 2:
crearArreglo();
break;
case 3:
break;
case 4:
break;
case 5:
visualizarArreglo();
break;
case 9:
System.out.println("\n\t\tFIN DE PROGRAMA");
break;
default:
System.out.println("\nOpcion equivocada");
}

} while (opcion != 9);

}

private static void insertarElemento() {
if (arreglo == null)
System.out.println("\nERROR. Primero ha de crear un arreglo");
else {
//Buscamos primera posición libre
int libre = -1;
for (int i = 0; i < arreglo.length; i++)
if (arreglo[i] == null) {
libre = i;
break; //Fin de búsqueda
}
//Comprobamos si hemos encontrado alguna posicion libre
if (libre == -1)
System.out.println("\nNo hay posiciones libres."
+ "\nTendrá que eliminar valor o actualizar uno existente");
else {
System.out.print("\nIntroduzca valor: ");
arreglo[libre] = teclado.nextLine();
}
}
}

private static void crearArreglo() {
System.out.print("\nIndique tamaño del nuevo arreglo: ");
int tm = Integer.parseInt(teclado.nextLine());
if (tm > 0) {
arreglo = new String[tm];
System.out.println("\nArreglo creado. Ya puede insertar nuevos valores.");
}
else
System.out.println("\nERROR. Ha de indicar un tamaño mayor que 0");
}

private static void visualizarArreglo() {
if (arreglo == null)
System.out.println("\nERROR. Primero ha de crear un arreglo");
else {
System.out.println("\nValores registrados:");
for (String valor: arreglo)
if (valor != null)
System.out.print("[" + valor + "] ");
}
}

}
Título: Re: Me pueden ayudar
Publicado por: 0916 en 15 de Octubre 2021, 01:45
Creo que algo así, no sé si me equivoco.

Código: [Seleccionar]
package menu;

import java.util.*;

public class Menu {

    private static String[] arreglo;
    private static Scanner teclado = new Scanner(System.in);

    public static void main(String[] args) {

        int opcion = 0;

        do {
            System.out.println("\n\n\t\tMENU");
            System.out.println("(1) - Insertar un elemento al arreglo");
            System.out.println("(2) - Crear un arreglo");
            System.out.println("(3) - actualizar posiciones del arreglo");
            System.out.println("(4) - Eliminar un valor del arreglo");
            System.out.println("(5) - Visualizar valores del arreglo");
            System.out.println("(9) - TERMINAR PROGRAMA");
            System.out.print("Elija opción: ");
            opcion = Integer.parseInt(teclado.nextLine());

            switch (opcion) {
                case 1:
                    insertarElemento();
                    break;
                case 2:
                    crearArreglo();
                    break;
                case 3:
                    actualizarPosicion();
                    break;
                case 4:
                    eliminarValor();
                    break;
                case 5:
                    visualizarArreglo();
                    break;
                case 9:
                    System.out.println("\n\t\tFIN DE PROGRAMA");
                    break;
                default:
                    System.out.println("\nOpcion equivocada");
            }

        } while (opcion != 9);

    }

    private static void insertarElemento() {
        if (arreglo == null) {
            System.out.println("\nERROR. Primero ha de crear un arreglo");
        } else {
            //Buscamos primera posición libre
            int libre = -1;
            for (int i = 0; i < arreglo.length; i++) {
                if (arreglo[i] == null) {
                    libre = i;
                    break; //Fin de búsqueda
                }
            }
            //Comprobamos si hemos encontrado alguna posicion libre
            if (libre == -1) {
                System.out.println("\nNo hay posiciones libres."
                        + "\nTendrá que eliminar valor o actualizar uno existente");
            } else {
                System.out.print("\nIntroduzca valor: ");
                arreglo[libre] = teclado.nextLine();
            }
        }
    }

    private static void crearArreglo() {
        System.out.print("\nIndique tamaño del nuevo arreglo: ");
        int tm = Integer.parseInt(teclado.nextLine());
        if (tm > 0) {
            arreglo = new String[tm];
            System.out.println("\nArreglo creado. Ya puede insertar nuevos valores.");
        } else {
            System.out.println("\nERROR. Ha de indicar un tamaño mayor que 0");
        }
    }

    private static void actualizarPosicion() {
        System.out.println("Quieres actualizar alguno? S/N");
        String respuesta = teclado.next();

        int posicion_actualizar = 0;
        if (respuesta.equals("S")) {
            System.out.println("que posicion del arreglo quieres actualizar?");

            posicion_actualizar = teclado.nextInt();

            System.out.println("Escribe el nuevo valor en la poscion " + posicion_actualizar);
            arreglo[posicion_actualizar] = teclado.next();
        }

        System.out.println("Este es el arreglo actualizado");

        for (int x = 0; x < arreglo.length; x++) {
            System.out.println(arreglo[x]);
        }
    }

    private static void eliminarValor() {
        int posicion;
        for (int i = 0; i < arreglo.length; i++) {
            System.out.println("[" + i + "]=" + arreglo[i]);
        }
        System.out.println("tu arreglo es de " + arreglo.length + " posiciones");
        System.out.println("Que valor quieres eliminar de tu arreglo?");

        posicion=teclado.nextInt();

        for (int i = 0; i < arreglo.length - 1; i++);
        {
            arreglo[i] = arreglo[i + 1];
        }
        //posiciones3
        //indice = 2
        arreglo[arreglo.length - 1] = "";
        System.out.println("Arreglo modificado");
        for (int i = 0; i < arreglo.length; i++) {
            System.out.println("[" + i + "]=" + arreglo[i]);
        }
    }

    private static void visualizarArreglo() {
        if (arreglo == null) {
            System.out.println("\nERROR. Primero ha de crear un arreglo");
        } else {
            System.out.println("\nValores registrados:");
            for (String valor : arreglo) {
                if (valor != null) {
                    System.out.print("[" + valor + "] ");
                }
            }
        }
    }

}
Título: Re: Me pueden ayudar
Publicado por: Kabuto en 15 de Octubre 2021, 16:51
No lo he probado pero parece que podría servir.


Solo comentar que, otra forma de "eliminar" valores de un arreglo sería dándoles valor null.
De ese modo, no es necesario, mover todos los valores una posición y "eliminar" el de la última posición.

Por eso en mis métodos, tanto para insertar elemento como para mostrar los valores en pantalla, compruebo que posiciones tienen valor null para decidir si puedo insertar ahí un valor o para decidir si no he de mostrarlo en pantalla.

Es otra forma de hacerlo. La tuya también sería correcta.