在方法consultas()
中,如何打印学生的姓名和成绩?
到目前为止,它打印给我的是内存地址,而不是名称和等级。
注意:接收此方法的地图是一个地图,它返回一个被调用的方法,该方法darDeAlta()
接收一个新学生的数据。
class Alumno {
private String nombre;
private int matricula;
private double calificaciones[];
Alumno(String nombre, int matricula, double calificaciones[]) {
this.calificaciones = calificaciones;
}
String getNombre() {
return nombre;
}
int getMat() {
return matricula;
}
double[] getCalif() {
return calificaciones;
}
void setCalif(double calif[]) {
calificaciones = calif;
}
}
public class Ejercicio {
Map<Integer, Alumno> alumnos = new TreeMap<>();
public Map darDeAlta() {
Scanner y = new Scanner(System.in);
//boolean b=false;
double d[] = new double[5];
System.out.println("Introduzca el nombre del estudiante");
String n = y.nextLine();
System.out.println("Introduzca su matricula (de 5 digitos)");
int m = y.nextInt();
System.out.println("Introduzca las calificaciones: \n");
for (int i = 0; i < 5; i++) {
System.out.println("Introduzca la calificacion");
d[i] = y.nextDouble();
}
if (alumnos.containsKey(m)) {
System.out.println("Esa matricula ya existe, ingrese otra matricula");
} else {
alumnos.put(m, new Alumno(n, m, d));
System.out.println("Se han dado de alta los datos :)");
System.out.println("Desea ingresar mas alumnos? \n");
String s = y.next();
//if (s.compareTo("si")==0 || s.compareTo("no")==0)
// b = true;
}
return alumnos;
}
public boolean consultas(Map alumnos) {
Scanner y = new Scanner(System.in);
boolean c;
System.out.println("Introduzca la matricula del estudiante a buscar");
int k = y.nextInt();
c = alumnos.containsKey(k);
if (c) {
System.out.println("Los datos son:\n" +"Nombre del alumno: "+ alumnos.get(k) + "Calificaciones: " + alumnos.values());
//System.out.println("Los datos son:\n" +"Nombre del alumno: "+ alumnos.get(k).getNombre() + "Calificaciones: " + al.getCalif());
} else {
System.out.println("El alumno no se encuentra");
}
return true;
}
在您的代码中,您有几个错误。
第一的
在您的班级中,您
Alumno
只是在初始化变量calificaciones
,因此您将只能访问存储在该变量中的信息。如果您尝试通过 methods 访问任何其他变量get
,您将一无所获,因为您没有为其分配任何类型的值。您传递给 Student 类的构造函数的值,除了参数的值之外,什么都没有,calificaciones
因为它被传递给了变量calificaciones
。要将值赋给其他变量,必须在构造函数中对其进行初始化。
第二
要获取存储在类变量中的值
Alumno
,您必须访问get
变量的方法,否则您将只能访问 Student 对象,它会向您显示“内存地址”,就像发生在您身上一样。为避免这种情况,您必须重写该方法toString()
并在其中返回 aString
,您可以在其中连接所有变量的值。要访问变量的值,请使用这些的 get 方法。
随着
alumnos.get(k)
您访问 Student 类型的对象,它会作为String
方法的覆盖显示给您toString()
。通过这些修复,您的代码将如下所示:
瞳孔
锻炼
您的类
Alumno
缺少在构造函数中分配nombre
y值matricula
。此外,您可以或应该
toString()
向学生班级添加一种方法,以便能够阅读地图。请注意,地图读数会显示您定义的数据
toString
。然后你可以像这样阅读地图:
你会有这样的东西:
如果您不想实现该方法
toString
,您可以这样做:结果将是:
PS:从 Java 8 开始,地图的读取方式如下:
打印特定学生
例如,如果您想要学生 1 的数据,您可以使用
key
查询学生:containsKey(keyDelAlumno)
结果: