Pregunta de Java

Tengo una clase por ejemplo Alumno, con un método

getNombre()

En la clase (aparte) Grupo, quiero imprimir el nombre dentro de un método. Como lo debo hacer exactamente?

Dentro del método he probado:
System.out.println("El alumno se llama "+getNombre());
System.out.println("El alumno se llama "+Alumno.getNombre());

Pero no funciona.
System.out.println("El alumno se llama "+objetoAlumno.getNombre());

Se supone q sería eso, para un objeto d la clase Alumno, teniendo un método get.Nombre().
Siempre y cuando tngas un objeto d la clase Alumno en esa clase.
K. Ichigo escribió:Tengo una clase por ejemplo Alumno, con un método

getNombre()

En la clase (aparte) Grupo, quiero imprimir el nombre dentro de un método. Como lo debo hacer exactamente?

Dentro del método he probado:
System.out.println("El alumno se llama "+getNombre());
System.out.println("El alumno se llama "+Alumno.getNombre());

Pero no funciona.


Crea el objeto Alumno antes

Alumno a=new Alumno

y después ya puedes usar sus métodos...

......
a.getNombre();
......


Un truquillo, si escribes this., cuando pongas el punto te saldrán todos los métodos de la clase en la que estas (por lo menos en NetBeans).
Depende de mucha cosas, el objeto es heredado o simplemente instanciado de otras clases?

El primer caso te serviria en caso de que tu clase actual heredase de Alumno o fuera un Alumno. La segunda solo te serviria si el metodo fuera estatico y en este caso te retornaria siempre el mismo.

Lo que tu intentas hacer es instanciar un objeto y llamar a su función, esto lo explica SIC002 perfectamente en el comentario superior.
Gracias por contestar.

Tengo un main en una clase Escuela, donde hay un menú con un switch se decide si añadir un alumno, ver características de los alumnos y salir.

Después la clase alumno:



public class Alumno{

private String nombre;
private String apellido;

public Alumno(String n, String a){
nombre = n;
apellido = a;

}

public void setNombre(String n){
nombre = n;
}

public String getNombre(){
return nombre;
}

public void setApellido(String a){
apellido = a;
}

public String getApellido(){
return apellido;
}
}




La clase grupo:


import javabook2.*;

public class Grupo{

private String nombreProfesor;
private char letra;
private Alumno[] tablaAlumnos;
private int contador;



public Grupo(String n, char l, int max){
nombreProfesor = n;
letra = l;
tablaAlumnos = new Alumno[max];
contador = 0;
}

public void añadirAlumno(){

String nombre;
String apellido;


if(contador < tablaAlumnos.length){
nombre = SimpleInput.getString("Nombre?");
apellido = SimpleInput.getString("Apellido?");

tablaAlumnos[contador] = new Alumno(nombre,apellido);
}else{
System.out.println("Error.");
}
}

public void imprimir(){
System.out.println("************Aquí es lo que os pido*******");
}
}



Gracias ;-)

Lo que me habíais dicho lo he probado pero no sé si lo habría hecho mal pero no funcionaba.
estan las dos clases metidas en el mismo package? hace tiempo que no programo en java pero me suena errores de ese tipo por ese problema.

salu2
ocihc escribió:estan las dos clases metidas en el mismo package? hace tiempo que no programo en java pero me suena errores de ese tipo por ese problema.

salu2


No están metidas en ningún package.

Según lo que me habéis dicho, ya veo más o menos por donde anda el problema. Ahora sólo hace resolverlo...

En la clase Grupo, tengo un array de Alumnos. (Para añadir un alumno, hay que ir a Gestion y se ejecutará el método añadirAlumno.

El problema es que yo no creo un alumno así:
Alumno a = new Alumno()

Sino:
tablaAlumnos[contador] = new Alumno(nombre,apellido);
contador++;

Es decir, supongo que el 'nombre' de ese objeto (no confundir con nombre y apellido) no tiene no ? :S

Por eso debe fallar cuando hago:
tablaAlumnos[contador].getNombre() no funciona ya que le falta 'el nombre' no?

Siento mi lenguaje tan malo ^^U
Necesitas un atributo nombre, y uno apellidos para poder contruir un objeto de la clase Alumno, con lo que, si lo añades desde la clase Gestor, no te dejara crearlo ya que no tienes esos atributos en dicha clase...

Edito: Veo que hay un método que pide por teclado (o eso creo) el nombre y apellidos si se cumple el if... pon un punto de ruptura en esa parte y comprueba que se introducen bien los datos. De todas formas si no te obligan a usar ninguna clase en concreto puedes hacer:


Scanner teclado=new Scanner(System.in); //Esto debajo del class


nombre=teclado.nextLong();
apellidos=teclado.nextLong();


Y eso leeria una cadena de caracteres por teclado y los almacenaria en nombre y apellidos.
Sepho escribió:Edito: Veo que hay un método que pide por teclado (o eso creo) el nombre y apellidos si se cumple el if... pon un punto de ruptura en esa parte y comprueba que se introducen bien los datos. De todas formas si no te obligan a usar ninguna clase en concreto puedes hacer:


Scanner teclado=new Scanner(System.in); //Esto debajo del class


nombre=teclado.nextLong();
apellidos=teclado.nextLong();


Y eso leeria una cadena de caracteres por teclado y los almacenaria en nombre y apellidos.
Lamentablemente tengo que seguir lo que me piden en clase. Osea que lo del next long, scanner... no lo puedo utilizar.

Lo del if es simplemente para que la tabla de Alumnos, cuando esté llena, no siga rellenando, ya que no cabrían más. Es decir si tiene una capacidad de 80 (en el código he puesto max), cuando tocase rellenar el alumno 81, se produciría el else. Así no se podrían añadir más.

Y respecto a lo anterior del edit, en la clase Gestión sólo invoco el método añadirAlumno, no creo nada. (Esto estoy seguro que está bien porque tengo un ejemplo de clase.)
Vaya, con el scanner es mas comodo :(

Respecto a la clase Alumno, no entiendo por qué tiene un método setNombre si ya hay un constructor que almacena los datos en las variables, es decir, al crear un new Alumno(nombre, apellidos) estas creando un objeto de la clase Alumno con un nombre y un apellido, no creo que deban ir esos metodos, ya que servirian para cambiar el nomrbre a un alumno aunque si os lo han pedido asi en clase nada, es solo q se me hace raro ^^
Lo que he hecho ha sido coger un 'modelo' que dejaron colgado los profes. Y ahí está hecho con sets ^^U La verdad es que no lo entiendo, pero supongo que tendrás razón.

Los ejercicios que tenga que hacer serán de este estilo, pero como en el ejemplo no utilizan lo de getNombre... tengo todo este follón T_T

Gracias igualmente Sepho.
Sepho escribió:Vaya, con el scanner es mas comodo :(

Respecto a la clase Alumno, no entiendo por qué tiene un método setNombre si ya hay un constructor que almacena los datos en las variables, es decir, al crear un new Alumno(nombre, apellidos) estas creando un objeto de la clase Alumno con un nombre y un apellido, no creo que deban ir esos metodos, ya que servirian para cambiar el nomrbre a un alumno aunque si os lo han pedido asi en clase nada, es solo q se me hace raro ^^

Si tienen sentido, para cambiar el valor de los atributos una vez instanciado el objeto desde otro objeto (que los atributos, que deberían ser private no podrías acceder a ellos mientras que con el get/set sip).
juas escribió:Si tienen sentido, para cambiar el valor de los atributos una vez instanciado el objeto (por ejemplo).



Sentido de "lenguaje" si tienen, pero no tiene sentido cambiarle el nombre a un alumno, a eso me refiero :P


El problema lo tienes en imprimir por pantalla el dato no? Si quieres añadir el del alumno que acabas de añadir, seria:


System.out.println("El alumno se llama: "+tablaAlumnos[contador].getNombre() );

De todos modos, asegurate de incrementar el contador una vez lo añades, si pusieses un:

tablaAlumnos[contador] = new Alumno(nombre,apellido);
contador++;


Entonces lo que te dije antes seria:

System.out.println("El alumno se llama: "+tablaAlumnos[contador-1].getNombre() );
Sepho escribió:

Sentido de "lenguaje" si tienen, pero no tiene sentido cambiarle el nombre a un alumno, a eso me refiero :P

Ah coño XD visto así vale, bueno, puede ser útil si has metido la gamba introducciendo el nombre [Ooooo].
juas escribió:Ah coño XD visto así vale, bueno, puede ser útil si has metido la gamba introducciendo el nombre [Ooooo].


Bueno realmente un alumno puede cambiarse el nombre, incluso el sexo yya puestos.
Haber.. aki hay una cosa q no m cuadara...

public void añadirAlumno(){

String nombre;
String apellido;


if(contador < tablaAlumnos.length){ <---- esto no m cuadra
nombre = SimpleInput.getString("Nombre?");
apellido = SimpleInput.getString("Apellido?");

tablaAlumnos[contador] = new Alumno(nombre,apellido);
}else{
System.out.println("Error.");
}
}

para ir añadiendo alumnos al array, primero comparas el contador, con los alumnos q hay.. pero haber.. el contador donde lo incrementas ??, por que la comparación de contador siempre es si 0 < que algo, siempre va a dar falso.. con lo cual no t va a hacer el IF. no ?
xklibur escribió:Haber.. aki hay una cosa q no m cuadara...

public void añadirAlumno(){

String nombre;
String apellido;


if(contador < tablaAlumnos.length){ <---- esto no m cuadra
nombre = SimpleInput.getString("Nombre?");
apellido = SimpleInput.getString("Apellido?");

tablaAlumnos[contador] = new Alumno(nombre,apellido);
}else{
System.out.println("Error.");
}
}

para ir añadiendo alumnos al array, primero comparas el contador, con los alumnos q hay.. pero haber.. el contador donde lo incrementas ??, por que la comparación de contador siempre es si 0 < que algo, siempre va a dar falso.. con lo cual no t va a hacer el IF. no ?



En todo caso daria verdadero, ya que el tamaño del array será siempre mayor (a no ser que lo inicialices a 0) con lo cual siempre se cumple el if, el problema está en que SIEMPRE escribira el alumno en la posicion 0, no rellenaria nunca el array.
16 respuestas