在java LinkedList节点上存储多个数据项,并使用.toString()将它们显示为字符串

时间:2011-02-08 08:26:37

标签: java linked-list

我正在做一个这样的编程项目:

处理学生注册的系统。注册时,您必须提供姓名,身份证号码,地址,电话,电子邮件和2课程代码才能注册。这应该存储在LinkedList中。

因为LinkedList中的每个节点只能存储一个数据,所以我决定更进一步。使用this答案作为基础我做了一个更改,而不是为每个注册的学生在8个连续节点中存储每个学生8的8个学生数据,我创建了一个具有8个属性的对象,它存储了8个数据。注册每个学生,所以当你想要删除学生时,只需删除包含该对象的节点,而不是删除每个要删除的学生的8个连续节点。

当我在对象上添加学生数据然后在LinkedList节点上添加学生数据时,这个想法很有效,但是,当我需要在屏幕上显示所有学生时,技术都会失败。

理论上,通过使用迭代器方法.hasNext()和.Next(),列表将迭代并在屏幕上显示存储在节点中的对象的内容,它确实......但是在哈希而不是字符串中(我需要的)。因此,在屏幕上,而不是显示像

这样的东西
Angel Pérez 15956228 7274205 skyx26@yahoo.com Caracas
Carolina Rojas 13508200 6253241 caro_caro27@hotmail.com Maracaibo

我得到了

PaqueteDeDatos@158b649
PaqueteDeDatos@127734f

经过多次搜索后,我被告知(这里)因为

而发生
  

打印“... @ ...”的东西,因为这是toString的默认版本。如果你想要漂亮的东西,你必须覆盖PaqueteDeDatos类中的toString()方法

问题是我无法使用迭代器同时显示所有节点的内容以覆盖.toString ()

请帮我这个,我需要将linkedList的节点内容显示为字符串而不是哈希

请请尽可能简单地向我解释我需要做些什么才能解决这个问题,我不太懂Java,我不能买书来理解它,也不能去公共图书馆找一个。我没有用java编码的朋友,所以我不能向任何人寻求帮助,我需要在接下来的24小时内完成。

请建设性和善良。我真的不需要被打屁股,因为我不遵循惯例或去java站点并在开始编码之前遵循教程。事实上我知道这一切,但这是一个匆忙的情况,我盲目地试图通过这个课程,因为我的编程老师根本没有教我任何东西。

我正在使用下面的代码(仅限选项1,4和5作品):

import java.util.*;

class PaqueteDeDatos {
    String Nombre;
    String Apellido;
    String Cedula;
    String Direccion;
    String Telefono;
    String CorreoElectronico;
    String Intensivo1;
    String Intensivo2;

   public PaqueteDeDatos(String a, String b, String c, String d, String e, String f, String g, String h) {
       Nombre = a;
       Apellido = b;
       Cedula = c;
       Direccion = d;
       Telefono = e;
       CorreoElectronico = f;
       Intensivo1 = g;
       Intensivo2 = h;
   }
}


public class Proyecto{

    public static void main(String[] args) {
        System.out.println ("┌──────────────────────────────────────────────────────────────────┐");
        System.out.println ("│                               Manejo de listas dinamicas en Java                                       │");
        System.out.println ("├──────────────────────────────────────────────────────────────────┤");
        System.out.println ("│Aplicacion que controla la informacion asociada a estudiante a inscribirse en un posible curso intensivo│");
        System.out.println ("└──────────────────────────────────────────────────────────────────┘");
        //Pausa();
        LinkedList<PaqueteDeDatos> ListaDeAlumnos = new LinkedList<PaqueteDeDatos>();
        while (true) {
        for (int i=0; i<25; ++i) System.out.println();


        MenuPrincipal();
        Scanner CapturaDeDatos = new Scanner(System.in);
        System.out.print ("Introduzca su opcion: ");
        char Opcion = CapturaDeDatos.next().charAt(0);
        if (Opcion !='1' && Opcion !='2' && Opcion !='3' && Opcion !='4' && Opcion !='5') {
            System.out.println("Opcion invalida. Por favor introduzca nuevamente su eleccion...");
            Pausa();
        }
        if (Opcion =='1') {
            for (int i=0; i<25; ++i) System.out.println();
            System.out.print ("Introduzca el nombre del alumno: ");
            String Nombre = CapturaDeDatos.next();
            System.out.println ();
            System.out.print ("Introduzca el apellido del alumno: ");
            String Apellido = CapturaDeDatos.next();
            System.out.println ();
            System.out.print ("Introduzca el numero de cedula del alumno: ");
            String Cedula = CapturaDeDatos.next();
                System.out.println ();
            System.out.print ("Introduzca la direccion de habitacion del alumno: ");
            String Direccion = CapturaDeDatos.next();
            System.out.println ();
            System.out.print ("Introduzca el telefono de contacto del alumno: ");
            String Telefono = CapturaDeDatos.next();
            System.out.println ();
            System.out.print ("Introduzca el correo electronico del alumno: ");
            String CorreoElectronico = CapturaDeDatos.next();
            System.out.println ();
            System.out.println ("A continuacion introduzca los intensivos a cursar por el alumno, basandose en la tabla superior.");
            System.out.println ("Tenga en cuenta que solo se pueden inscribir MAXIMO 2 intensivos. Para evitar retrazos en el inicio");
            System.out.println ("de los intensivos, procure que los intensivos escogidos por el alumno no choquen entre si");
            System.out.println ("por tener los mismos horarios. Introduzca 00 (2 ceros) luego del primer intensivo, si el alumno solo");
            System.out.println ("va a cursar un intensivo...");
            System.out.println ();
            System.out.print ("Introduzca el codigo del intensivo seleccionado por el alumno: ");
            String Intensivo1 = CapturaDeDatos.next();
            System.out.println ();
            System.out.print ("Introduzca el codigo del intensivo seleccionado por el alumno: ");
            String Intensivo2 = CapturaDeDatos.next();
            System.out.println ();
            PaqueteDeDatos Alumno = new PaqueteDeDatos (Nombre,Apellido,Cedula,Direccion,Telefono,CorreoElectronico,Intensivo1,Intensivo2);
            ListaDeAlumnos.add(Alumno);
            System.out.println ("Alumno inscrito exitosamente.");
            System.out.println ("El sistema regresara al menu principal en 5 segundos...");
            Pausa();
        }
//        if (Opcion =='2') {
//
//        }
  //      if (Opcion =='3') EliminarAlumno();
        if ((int) Opcion =='4') {
            Iterator Iterador = ListaDeAlumnos.iterator();
            while (Iterador.hasNext())
                System.out.println (Iterador.next());
            System.out.println ("Listado de alumnos mostrado exitosamente.");
            System.out.println ("El sistema regresara al menu principal en 5 segundos...");
            Pausa();
            for (int i=0; i<25; ++i) System.out.println();
            MenuPrincipal();
            System.out.print ("Introduzca su opcion: ");
            Opcion = CapturaDeDatos.next().charAt(0);

        }
        if (Opcion =='5') System.exit(0);
        }
    }

    // Metodo para la pausa en pantalla
    public static void Pausa() {
        try {
            Thread.sleep(5000);
        }
        catch (InterruptedException ex) {
        }
    }

       // Metodo para el menu principal
    public static void MenuPrincipal() {
        System.out.println ("╔════════════════════╗");
        System.out.println ("║         Menu Principal        ║");
        System.out.println ("╠════════════════════╣");
        System.out.println ("║                               ║");
        System.out.println ("╠════════════════════╣");
        System.out.println ("║       Inscribir Alumno    (1) ║");
        System.out.println ("╠════════════════════╣");
        System.out.println ("║       Modificar Alumno    (2) ║");
        System.out.println ("╠════════════════════╣");
        System.out.println ("║       Eliminar Alumno     (3) ║");
        System.out.println ("╠════════════════════╣");
        System.out.println ("║ Mostrar Alumnos Inscritos (4) ║");
        System.out.println ("╠════════════════════╣");
        System.out.println ("║      Salir del sistema    (5) ║");
        System.out.println ("╚════════════════════╝");
            System.out.println ();
    }

}

2 个答案:

答案 0 :(得分:3)

使类可打印或toString()能够正常的方法是覆盖类的toString()方法。最简单的方法是让IDE生成toString()方法。其他任何事情都可能更难。

如果您无法更改代码以添加toString(),您可以编写自己的方法将对象的List转换为String,该String检查列表中的每个元素并根据需要进行转换。

答案 1 :(得分:0)

您的PaqueteDeDatos类应覆盖toString方法,以便打印所需的字符串而不是打印hashCode。

class PaqueteDeDatos 
{
 String Nombre;
 String Apellido; 
 String Cedula; 
 String Direccion;
 String Telefono;
 String CorreoElectronico;
 String Intensivo1;
 String Intensivo2;

 public PaqueteDeDatos(String a, String b, String c, String d, String e, String f, String g, String h) 
 {
  Nombre = a;
  Apellido = b;
  Cedula = c;
  Direccion = d;
  Telefono = e;
  CorreoElectronico = f;
  Intensivo1 = g;
  Intensivo2 = h;
 }
 public String toString()
 {
  StringBuilder sb = new StringBuilder();
  sb.append(Nombre).append(" ")
    .append(Apellido).append(" ")
    .append(Cedula).append(" ")
    .append(Direccion).append(" ")
    .append(Telefono).append(" ")
    .append(CorreoElectronico).append(" ")
    .append(Intensivo1).append(" ")
    .append(Intensivo2).append(" ");
  return sb.toString();
 }
}