Título: Problemas con manejo de memoria dinamica
Publicado por: Legnak 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
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
|