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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Problemas con manejo de memoria dinamica
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problemas con manejo de memoria dinamica  (Leído 2,052 veces)
Legnak

Desconectado Desconectado

Mensajes: 61


("Programador");


Ver Perfil
Problemas con manejo de memoria dinamica
« en: 3 Febrero 2012, 17:51 pm »

Hola a todos, estoy haciendo un programa que me mandaron en la universidad pero estoy algo confundido, el programa lo que hace es crear un registro con una clase, en el menu de opciones esta la opcion de buscar y eliminar, igual la de mostrar todo, luego de que se cierra el programa se guarda lo que estaba en la clase en el archivo. Podrian hecharle una ojeada al codigo y corregirle los errores?

acá esta el código
Código:



package procesamiento;

/**
 *
 * @author Jose Angel
 */
import java.util.Scanner;
import java.io.*;

public class Main {



 
    public Main() {
    }
   
   

public static Articulo aux, aux2, aux_elim, primero; //Auxiliares necesarios para llevar el control de la memoria dinámica
public  static int i,j,respuesta_eliminar; //i,j son contadores, respuesta_eliminar es el codigo que se usara para eliminar
public static char respuesta_control, talla; // respuesta_control es para llevar el control del ciclo central, talla para guardar el valor de la talla antes de meterlo en la memoria dinámica
public static boolean encontrado, existe; //valores booleanos que ayudan en la busqueda y en la eliminacion
public static int opcion, numero,  buscar; //otros valores, opcion para el menu, numero es el codigo que se le asignara a cada articulo, buscar es el id que se usara para buscar.
public static String nombre, color; //otros valores que se usan para agarrar valores antes de meterlos a la clase.
public static float precio; //otro valor que se usa para agarrar un valor antes de meterlo a la clase.
public static void main(String[] args) {
 aux2 = null; 
 primero = null;
    do
    {
    encontrado = false;
existe = false;
//los valores de arriba deben inicializarce en false.
    Scanner teclado= new Scanner(System.in); //lectura desde el teclado para inicializar el menu
    System.out.println("Que desea hacer? \n1.- Agregar (1)\n2.- Buscar (2)\n3.- Eliminar (3)\n4.- Mostrar Todo (4)\n5.- Salir (5)");
    opcion = teclado.nextInt();//lectura de entero desde el teclado.
    switch (opcion)
    {
        case 1: //opcion agregar
           
            aux = new Articulo();//crea un nuevo nodo en la clase articulo
            if (primero == null)
            {
                primero = aux;
            }
            Scanner lector_n= new Scanner(System.in); // todos los scanners que vienen aca son para leer los datos necesarios para llenar los campos de la clase
            System.out.println("Escriba el nombre del producto:");
            nombre = lector_n.next();
            aux.nombre = nombre;
            Scanner lector_t = new Scanner(System.in);
            System.out.println("Escriba la talla del producto:");
            talla = lector_t.next(). charAt(0);//lectura de la primera letra de lo que se escribe desde el teclado
            aux.talla = talla;
            Scanner lector_c = new Scanner(System.in);
            System.out.println("Escriba el color del producto:");
            color = lector_c.next();
            aux.color = color;
            Scanner lector_p = new Scanner(System.in);
            System.out.println("Escriba el precio del producto:");
            precio = lector_p.nextFloat(); //lectura del numero decimal que se escribe desde el teclado
            aux.precio = precio;
            numero++;
            aux.codigo = numero;//asignacion de el codigo al producto
            aux2 = aux;
            aux.guia = aux2;
           System.out.println(aux2.guia);
            break;
        case 2:
            Scanner buscador = new Scanner(System.in);
            System.out.println("Escriba el codigo del producto que desea buscar");
            buscar = buscador.nextInt() ;//se lee el entero que seria el codigo que se esta buscando
          // aux2 = primero;
           System.out.println(aux2.guia);
           
          for (int b = 0; i < numero; i++)  {//se hace el recorrido a la clas
             if (aux2.codigo == buscar) //si se encuentra encontrado va a ser igual a true
                {
                    encontrado = true;
                    break;
                }

            aux2 = aux2.guia;
              }
           
            if (encontrado == true) //si encontrado fue true mostrara todos los datos de la clase que buscamos por el codigo
                 System.out.println("Nombre: " + aux2.nombre + " Talla: " + aux2.talla + " Color:" + aux2.color + " Precio:" + aux2.precio+ " Codigo:" + aux2.codigo );
            else
                System.out.println("No encontrado.");
            break;
        case 3: //ESTA PARTE NO ESTA BIEN AUN
             Scanner eliminar= new Scanner(System.in);
             System.out.println("Inserte el codigo del producto que desea eliminar");
             respuesta_eliminar = eliminar.nextInt();
           
        aux2 = primero;//nos situamos al inicio de la lista
        while (aux2.guia != null){
           
            //si el nodo a eliminar fuera el primero
             if (aux2.codigo == respuesta_eliminar){
                //guardamos en un auxiliar del siguiente
                //del que vamos a eliminar
                Articulo auxiliar = aux2.guia.guia;
                aux2.guia = null;
                aux2.guia = auxiliar;
            }

            aux2 = aux2.guia;
        }
                     
         
            break;
        case 4:
         
         while (aux2 != null)   
         { //aca se hace el recorrido a todo lo que esta en la clase y lo muestra en pantalla
       
                System.out.println("Nombre: " + aux2.nombre + " Talla: " + aux2.talla + " Color:" + aux2.color + " Precio:" + aux2.precio+ " Codigo:" + aux2.codigo );         
                 aux2 = aux2.guia;//esto es para que se vaya incrementando las direcciones.
         }
            break;
        case 5:
                break;
        default:
            System.out.println("Opcion "+ opcion + " es inválida");
            break;
    }
    Scanner lectura= new Scanner(System.in);//nueva lectura desde teclado para saber si se hara alguna otra cosa en el menu
    System.out.println("Desea continuar?");
    respuesta_control = lectura.next(). charAt(0);
    }while (respuesta_control == 's' || respuesta_control == 'S' ); 
    //aca empieza lo que tiene que ver con el archivo
    FileWriter archivo = null; // este valor hace referencia al nuevo archivo que crearemos
    PrintWriter escritor = null; // este valor hace referencia al escritor que usaremos para escribir (obviamente D:)
        try
        {
            archivo = new FileWriter("c:/nuevoarchivo.txt"); //aqui seleccionamos el nuevo archivo que usaremos para escribir (si no existe igualmente se crea)
            escritor = new PrintWriter(archivo); //esto es lo que nos ayudara a escribir en el archivo
            while (aux2 != null){ //hacemos un recorrido a toda la clase
                escritor.println("Nombre: " + aux2.nombre + " Talla: " + aux2.talla + " Color:" + aux2.color + " Precio:" + aux2.precio+ " Codigo:" + aux2.codigo ); //y empezamos a escribir linea por linea todos los valores que hay en la clase
                 aux2 =aux2.guia;//incrementa las direcciones
            }       
         
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
           try {
           // Nuevamente aprovechamos el finally para
           // asegurarnos que se cierra el fichero.
           if (null != archivo)
              archivo.close();
           } catch (Exception e2) {
              e2.printStackTrace();
           }
        }
   
   
                   
                }
                }
 
Gracias de antemano
Saludos


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Manejo de uso en Memoria
Programación Visual Basic
<--v1c1ous--> 2 1,471 Último mensaje 11 Mayo 2006, 05:00 am
por <--v1c1ous-->
Memoria dinámica
Programación C/C++
eleon 6 4,756 Último mensaje 24 Enero 2012, 22:17 pm
por Eternal Idol
De qué sirve el manejo de memoria dinámica en c++
Programación C/C++
Bob1098 8 3,294 Último mensaje 11 Agosto 2013, 21:18 pm
por MeCraniDOS
Problemas con memoria, manejo de arcivhos
Programación C/C++
clio 4 2,040 Último mensaje 8 Mayo 2017, 08:37 am
por clio
Problemas de perdida de memoria con memoria dinamica
Programación C/C++
ing_maipu 1 2,077 Último mensaje 28 Octubre 2017, 18:48 pm
por CalgaryCorpus
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines