Ayuda para que un metodo me devuelva un objeto

Iniciado por rych, 1 Mayo 2016, 02:05 AM

0 Miembros y 1 Visitante están viendo este tema.

rych

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!!

LeHaine

#1
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.

crack81

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:

Código (java) [Seleccionar]
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

Código (java) [Seleccionar]

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();
   }
   
}

Si C/C++ es el padre de los lenguajes entonces ASM es dios.

rych

@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.

rych

@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  :-(


+ 1 Oculto(s)

no utilices donde sea static

todo tiene un objetivo...
saludos...