elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Tad en q parte stoy fallando!!!
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Tad en q parte stoy fallando!!!  (Leído 2,514 veces)
XxArCaNgElxX

Desconectado Desconectado

Mensajes: 19


Ver Perfil
Tad en q parte stoy fallando!!!
« en: 4 Junio 2011, 05:04 am »

Buenas amigos aca un problemita en java obre tad pilas.
Tengo mis metodos apilar,desapilar,pilavacia,pilalena imprimir pila esoos son mis metodos.

apilo 3 datos 1,2,3  y de ahi pongo n=2 entonces deberia imprimirme asi 1,2,3,1,2,3 y asi dependiendo cuanto le asigne a n ahi sta el metodo q intente hacer no se q esta mal mi metodo es
repetirN

Código
  1. public class TadPila implements Pila {
  2.  
  3.    private static class pilaVacia extends Exception {
  4.  
  5.        public pilaVacia() {
  6.        }
  7.    }
  8.        private int tope;
  9.    private int max=4;
  10.    private int[] Datos;
  11.  
  12.    public TadPila() {
  13.  
  14.  
  15.        Datos=new int[max];  //crear la pila vacia
  16.  
  17.    }
  18.  
  19.  
  20.  
  21.    public boolean pilaVacia() {
  22.       // throw new UnsupportedOperationException("Not supported yet.");
  23.  
  24.        if(tope==0)
  25.  
  26.            return true;
  27.        else
  28.            return false;
  29.  
  30.  
  31.    }
  32.  
  33.    public boolean pilaLlena() {
  34.        //throw new UnsupportedOperationException("Not supported yet.");
  35.  
  36.        if(tope==max)
  37.            return true;
  38.        else
  39.            return false;
  40.  
  41.    }
  42.  
  43.    public void apilar(int dato) {
  44.        //throw new UnsupportedOperationException("Not supported yet.");
  45.        if(pilaLlena()){
  46.            System.out.println("Desbordamiento pila llena");
  47.        }else{
  48.            tope+=1;
  49.            Datos[tope]=dato;
  50.        }
  51.    }
  52.  
  53.    public int desapilar() {
  54.      //  throw new UnsupportedOperationException("Not supported yet.");
  55.      int dato=-999;
  56.      if(pilaVacia()){
  57.          System.out.println("Underflow pila vacia...");
  58.  
  59.      }else{
  60.          dato=Datos[tope];
  61.          tope-=1;
  62.      }
  63.      return dato;
  64.        // <editor-fold defaultstate="collapsed" desc="comment">
  65.    }// </editor-fold>
  66.    public void escribirPila(){
  67.        int dato;
  68.        if(!pilaVacia()){
  69.            dato=desapilar();
  70.            System.out.println(dato);
  71.            escribirPila();
  72.            apilar(dato);
  73.  
  74.        }
  75.    }
  76.   public void repetirN (Pila p, int n)  {
  77.         int elem, i;
  78.        if (!p.pilaVacia ()) {
  79.         elem = p.desapilar ();
  80.        repetirN (p, n);
  81.        for (i = 0; i < n; i++){
  82.            p.apilar (elem);
  83.        }
  84.  
  85. }
  86.    }
  87.    public void imprimir(){
  88.        int dato,i;
  89.        for(i=0;i<tope+1;i++){
  90.            dato=Datos[i];
  91.            System.out.println(dato);
  92.        }
  93.    }
  94.     public void Imprime_Datos()
  95.        {
  96.                if(pilaVacia()==true)
  97.                {
  98.                        System.out.println("La pila esta vacia, ingrese datos primero:");
  99.                }
  100.                else
  101.                        for(int Contador=1;Contador<Datos.length;Contador++)
  102.                                System.out.println("Los valores de la pila son:"+Datos[Contador]);
  103.        }
  104.  
  105.  
  106.  
  107. }
  108. /////////////////////esta es mi interfaz/////////////////////////////////////////
  109. public interface Pila {
  110.  
  111.    boolean pilaVacia();
  112.    boolean pilaLlena();
  113.    void apilar(int dato);
  114.    void repetirN(Pila p, int n);
  115.    int desapilar();
  116.  
  117. }
  118. ////////////////este es mi main/////////////////////////
  119.    public static void main(String[] args) {
  120.  
  121.        TadPila p1= new TadPila();
  122.        int dato = 0;
  123.       int n=2;
  124.        p1.apilar(1);
  125.  
  126.        p1.apilar(2);
  127.  
  128.        p1.apilar(3);
  129.  
  130.         p1.escribirPila();
  131.  
  132.  
  133.         p1.imprimir();
  134.  
  135.         p1.Imprime_Datos();
  136.                 p1.repetirN(p1, n);
  137.  
  138.  
  139.    }
  140.  


En línea

ShotgunLogic

Desconectado Desconectado

Mensajes: 233


Claws so razor sharp


Ver Perfil
Re: Tad en q parte stoy fallando!!!
« Respuesta #1 en: 4 Junio 2011, 15:42 pm »

Código:
   public void repetirN (Pila p, int n)  {
         int elem, i;
        if (!p.pilaVacia ()) {
         elem = p.desapilar ();
        repetirN (p, n);
        for (i = 0; i < n; i++){
            p.apilar (elem);
        }
 
}

Vale, lo que haces es desapilar todos los elementos, y luego apilarlos de nuevo, n veces. Así a ojo una depuración:

P = [1, 2, 3]
n = 3

llamas al metodo, entonces quitas 3, salta el repetir y quitas 2, salta otra vez y quitas 1. Ahora se resuelve(si, a lo jugador de MTG xD) el bucle del último(en este caso el 1, pero ojo, según veo haces una llamada un procedimiento de más, en el que no haces nada, osea, que no es muy óptimo), con lo cual metes el 1 tres veces, luego el 2 3 veces y el 3 tres veces, quedando:

P = [111, 222, 333]

Solución:

Creo, y digo creo, no se puede(o si se puede es realmente muchas operaciones) ya que sacando los enteros de uno en uno, o como mucho seguidos pero siendo los mismos, no vas a conseguir el orden que esten salteados. Por ejemplo si lo metiesemos en otra pila, podriamos meterlos como mucho como antes, y estariamos igual, ya que para sacarlos solo podemos empezar por arriba, y vamos a tenerlos seguidos.

En resumen, usa un bucle recursivo o algo de manera que la puedas recorrer y coger cada elemento con un get, que es más fácil, y que no lleva tantas operaciones. De todas formas tienes algunos fallitos de optimización que podrias mejorar, pero eso se coge con la prática :laugh:



En línea

The clans are marching against the law, bagpipers play the tunes of war, death or glory I will find, rebellion on my mind.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Esta fallando el foro?
Sugerencias y dudas sobre el Foro
BenRu 9 4,049 Último mensaje 4 Abril 2006, 22:42 pm
por aNexos
¿Está fallando mi disco duro?
Noticias
wolfbcn 3 3,419 Último mensaje 8 Febrero 2011, 17:08 pm
por EvilGoblin
Que puede estar fallando? (C)
Programación C/C++
Saberuneko 7 4,809 Último mensaje 10 Marzo 2011, 10:21 am
por Akai
Criptografia WI fallando
WarZone
MeTaD 1 2,905 Último mensaje 18 Abril 2014, 04:26 am
por Luis_1984
Ayuda!!! me urge stoy desesperada!!
Redes
flexy 3 3,670 Último mensaje 22 Abril 2013, 09:20 am
por Platanito Mx
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines