Hola ,espero puedan ayudarme estoy tratando de hacer un programa en donde tengo una clase llamada Alumno donde tengo definidas las siguientes variables
public class Alumno {
String name;
int edad;
float calif;
}
y mi main,en el cual tengo por ahorita definidos dos metodos uno que inicializa a los alumnos y otro que me los muestra por pantalla, pero tengo problemas para realizar un tercer metodo en el cual me muestre al alumno con mayor calificacion esto incluyendo todos sus datos , espero puedan ayudarme este es mi codigo
import java.util.Scanner;
public class Prog2 {
public static void ini_alumno (Alumno A){
Scanner leer = new Scanner(System.in);
System.out.println("Da nombre");
A.name = leer.nextLine();
System.out.println("Da edad de " + A.name + ": ");
A.edad = leer.nextInt();
A.calif = (float)(Math.random()*10.0); // La calificacion se obtiene aleatoriamente.
}
public static void ver_info_alumno(Alumno A){
System.out.printf("%s\t\t%d\t\t%2.1f\n",A.name,A.edad,A.calif);
}
static float promedio(float AlumnoA1 , float AlumnoA2, float AlumnoA3){ //Funcion
float prom;
prom = (AlumnoA1 + AlumnoA2 + AlumnoA3)/3;
return prom;
}
static Alumno mejor_calificacion (Alumno A1 , Alumno A2, Alumno A3){// Este es el //metodo que no puedo realizar
if(A1.calif>A2.calif){// aqui comparo las califcaciones
return System.out.println(ver_info_alumno(A1));//Pero en esta parte no se // como realizar el return del metodo , ya que no se como retornar un objeto
}
}
public static void main(String[] args) {
System.out.println("Alumno 1");
Alumno A1= new Alumno();
ini_alumno(A1);
System.out.println("Alumno 2");
Alumno A2= new Alumno();
ini_alumno(A2);
System.out.println("Alumno 3");
Alumno A3= new Alumno();
ini_alumno(A3);
System.out.println("Nombre "+" Edad "+ " Calificacion");
ver_info_alumno(A1);
ver_info_alumno(A2);
ver_info_alumno(A3);
System.out.printf("fEl promedio de los alumnos es :"+promedio(A1.calif, A2.calif, A3.calif));
}
}
Espero puedan ayudarme,soy nuevo en esto gracias!!
Hola. Para realizar tu tercero método, necesitas asegurarte de que el método returns el objeto correcto.
El problema:
public static void ver_info_alumno(Alumno A){
System.out.printf("%s\t\t%d\t\t%2.1f\n",A.name,A.edad,A.calif);
}
El método returns void. Quieres return String. Entonces:
public static String ver_info_alumno(Alumno A){
return A.name + "\t\t" + A.edad + "\t\t" + A.calif;
}
Y en tu tercero método, puedes usar System.out.println:
static Alumno mejor_calificacion (Alumno A1 , Alumno A2, Alumno A3) {
if(A1.calif > A2.calif){
System.out.println(ver_info_alumno(A1));
}
}
Por favor, discúlpame por mi español.
Hola @rych primero que todo tu codigo parece mas codico style C que codigo java, ya que
esta hecho de manera secuencial lo cual no esta mal pero en java se "supe" se deberia trabajar con el paradigma de programacion orientada a objetos.
Bueno con respecto a tu pregunta la respuesta es esta:
public Alumno(Alumno a1,Alumno a2,Alumno a3 ){
if((a1.califacion>a2.califiacion) && (a1.califacion>a3.califiacion)){
return a1;
}
else if ((a2.califacion>a1.califiacion) && (a2.califacion>a3.califiacion)){
return a2;
}
else{
return a3;
}
}
Pero no es precisamente lo mejor, imagina que tienes mas de 3 alumnos esta funcion no serviria lo mejor es guardar tus alumnas en un arreglo o lista de alumnos para despues
recorrerlos con un for y saber cual tiene mejor califiacion.
Bueno me decidi ha armarte una posible solucion
import java.util.ArrayList;
import java.util.List;
public class ElhackerNET {
public static void main(String[] args) {
Alumno al1=new Alumno("jose", 10, 8);
Alumno al2=new Alumno("Maria", 12, 9);
Alumno al3=new Alumno("Pedro", 11, 7);
AdministrarAlumnos alumnos=new AdministrarAlumnos();
//Insertar los alumanos uno por uno
alumnos.anadirAlumno(al1);
alumnos.anadirAlumno(al2);
alumnos.anadirAlumno(al3);
//Mostramos los resultados
System.out.println("El promedio es "+alumnos.promedio());
System.out.println("El mejor estudiante es "+alumnos.mejorAlumno().getNombre());
//Eliminamos los alumnos
alumnos.eliminarAlumnos();
}
}
class Alumno{
private String nombre;
private int edad;
private int calificacion;
public Alumno(String nombre, int edad, int calificacion) {
this.nombre = nombre;
this.edad = edad;
this.calificacion = calificacion;
}
public String getNombre() {
return nombre;
}
public int getEdad() {
return edad;
}
public int getCalificacion() {
return calificacion;
}
}
class AdministrarAlumnos{
private List<Alumno> alumnos;
/*Constructores de la clase*/
public AdministrarAlumnos(){
this.alumnos=new ArrayList<>();
}
public AdministrarAlumnos(List<Alumno> alumnos){
this.alumnos.addAll(alumnos);
}
/*
Anadimos un solo alumno
*/
public void anadirAlumno(Alumno alumno){
alumnos.add(alumno);
}
/*
Anadimos una lista de alumnos
*/
public void anadirAlumnos(List<Alumno> alumnos){
this.alumnos.addAll(alumnos);
}
/*
Obtenemos el promedio de las califaciones
*/
public float promedio(){
float promedio=0;
for(Alumno a:alumnos){
promedio+=a.getCalificacion();
}
return promedio/alumnos.size();
}
/*
Obtenemos el Alumno con la mejor calificacion
*/
public Alumno mejorAlumno(){
int maxCalifacion=0;
Alumno xAlumno=null;
for(Alumno a:alumnos){
if(maxCalifacion<a.getCalificacion()){
maxCalifacion=a.getCalificacion();
xAlumno=a;
}
}
return xAlumno;
}
public void eliminarAlumnos(){
this.alumnos.clear();
}
}
@crack81 muchas gracias por la explicacion , lo que sucede que apenas estamos conociendo a ver los conceptos de objetos ,clases y pase de parametros, respecto a la respuesta me podrias ayudar es que en el metodo que me indicas el ejercicio me pide mostrar por pantalla todos los datos de el alumno que tenga la mejor calificacion y ya intente usando lo que me comentas pero no me muestra los datos del alumno.
Gracias por lo ayuda.
@LeHaine gracias tu español se entiende muy bien ! pero tengo un proble ma es esta parte
public static String ver_info_alumno(Alumno A){
return A.name + "\t\t" + A.edad + "\t\t" + A.calif;
}
Ya que no me muestra por pantalla la informacion de los alumnos intente modicifcar pero aun soy novato en esto :-(
no utilices donde sea static
todo tiene un objetivo...
saludos...