Autor Tema: Colas y Pilas Java dinámica peek push pop eliminar números primos de una cola  (Leído 2118 veces)

Wolfi207Y

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 1
    • Ver Perfil
Hola, necesito ayuda para eliminar números primos de una cola en Java. La cola ya está creada pero necesito el método para eliminarlos. Ademas de tener que ordenar de mayor a menor los números en la cola. Si me pueden indicar como hacerlo me serian de mucha ayuda :3

Adjuntaré la Clase "ColaDinamica", intenté eliminar N° primos pero el "2" no me lo eliminó y no sé en que me equivoqué.

Código: [Seleccionar]
public class ColaDinamica {
    Nodo inicio;
    Nodo fin;

    public ColaDinamica(){
        inicio = null;
        fin = null;
    }
    public boolean isEmpty(){
        return inicio==null;
    }

    public int peek(){
        if(!isEmpty()){
            return inicio.elemento;
        }
        return -1;
    }

    public void push(int elemento){
        Nodo nuevo = new Nodo(elemento);
        if(isEmpty()){
            inicio=nuevo;
            fin=nuevo;
        }
        else{
            fin.sig = nuevo;
            fin = nuevo;
        }
    }

    public void pop(){
        if(!isEmpty()){
            inicio = inicio.sig;
        }
    }

    public  void sort() {
        //INGRESE SU CÓDWIGO AQUÍ
    }

    public  void eliminarPrimos() {
        ColaDinamica aux= new ColaDinamica();

        while(!isEmpty()){
            aux.push(peek());
            pop();
        }
        while(!aux.isEmpty()){
            if(aux.peek()%2==0||aux.peek()==1){
                push(aux.peek());
                aux.pop();
                if(aux.isEmpty()){
                    break;
                }
            }else{
                aux.pop();
                if(aux.isEmpty()){
                    break;
                }
            }
        }
    }

    @Override
    public String toString(){
        ColaDinamica p = new ColaDinamica();
        String salida = "";
        while(!this.isEmpty()){
            salida+=this.peek()+"-->";
            p.push(this.peek());
            this.pop();
        }

        while(!p.isEmpty()){
            this.push(p.peek());
            p.pop();
        }

        return salida;
    }
}

« Última modificación: 15 de Enero 2022, 20:41 por Ogramar »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 985
    • Ver Perfil
Re: Colas y Pilas Java
« Respuesta #1 en: 23 de Julio 2021, 01:40 »
No me llevo muy bien con las pilas y las colas....

En cualquier caso, aquí no veo que se estén buscando números primos:
Código: [Seleccionar]
if(aux.peek()%2==0||aux.peek()==1){
                push(aux.peek());
                aux.pop();
                if(aux.isEmpty()){
                    break;
                }
            }else{
                aux.pop();
                if(aux.isEmpty()){
                    break;
                }

Con ese if else, se está distinguiendo entre pares e impares, pero no primos.
Que NINGÚN número par es primo.
Pero no todos los impares son primos.

Necesitarías un método de apoyo, que sea tipo boolean, de manera que reciba un entero y diga TRUE si es primo o FALSE si no lo es.

Un número primo es aquel que solo es divisible por sí mismo (bueno, y por 1, porque todos los números son divisibles por 1)
Por ejemplo si el método recibe el número 9, pues ha de comprobar si es divisible por 8, por 7, por 6, por 5, por 4, por 3 ó por 2.
Si es divisible por alguno de ellos, entonces NO es primo.

Resulta que 9 SÍ es divisible por 3,
Citar
9 % 3 == 0 es TRUE
Por tanto, 9 NO es primo.

Para desarrollar un algoritmo que compruebe lo de ser primo, ya habrás deducido que se necesita un bucle que vaya en orden inverso comenzando por n-1 hasta llegar a 2.
Y en cada iteración comprobar si n es divisible por alguno de los números de esa secuencia.

Intenta escribir ese algoritmo, o busca ejemplos por la red, que los habrá a montones.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".