Test Foro de elhacker.net SMF 2.1

Programación => Programación General => Java => Mensaje iniciado por: rych en 1 Mayo 2016, 02:05 AM

Título: Ayuda para que un metodo me devuelva un objeto
Publicado por: rych en 1 Mayo 2016, 02:05 AM
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!!
Título: Re: Ayuda para que un metodo me devuelva un objeto
Publicado por: LeHaine en 1 Mayo 2016, 03:29 AM
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.
Título: Re: Ayuda para que un metodo me devuelva un objeto
Publicado por: crack81 en 1 Mayo 2016, 03:44 AM
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();
   }
   
}

Título: Re: Ayuda para que un metodo me devuelva un objeto
Publicado por: rych en 1 Mayo 2016, 19:30 PM
@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.
Título: Re: Ayuda para que un metodo me devuelva un objeto
Publicado por: rych en 1 Mayo 2016, 19:34 PM
@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  :-(

Título: Re: Ayuda para que un metodo me devuelva un objeto
Publicado por: + 1 Oculto(s) en 2 Mayo 2016, 03:29 AM
no utilices donde sea static

todo tiene un objetivo...
saludos...