0 votos
por (20 puntos) en Java
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!!

1 Respuesta

0 votos
por (560 puntos)
Hola que tal buenas, primero que nada veo bien el codigo que tienes, y en cuanto al error parece que lo
identifico, sin embargo sera mejor irnos por partes, antes que nada te aconcejo que en tus clases modelo
trabajes con los metodos de asignacion, como lo son los metodos Set and Get, esto para que tengas una idea
mas clara de lo que quieres realizar, especialmente por que al estar introduciendote a la programacion
orientada a objetos, el definir estos metodos puede servirte de mucho, el getter o Get es un metodo para
recuperar el dato de una propiedad de tu objeto, y el set es para establecer un valor a una propiedad de tu
objeto, dicho esto tu clase resultante alumno, quedaria de la siguiente manera.

public class Alumno {
    private String name;
    private int edad;
    private float calif;

    //Metodo para obtener el valor de la propiedad name
    public String Getname(){
        return name;
    }

    //Metodo para establecer el valor a la propiedad name
    public void Setname(String name){
        this.name=name;
    }

    //Metodo para obtener el valor de la propiedad edad
    public int Getedad(){
        return edad;
    }

    //Metodo para establecer el valor a la propiedad edad
    public void Setname(int edad){
        this.edad=edad;
    }

    //Metodo para obtener el valor de la propiedad calif
    public float Getcalif(){
        return calif;
    }

    //Metodo para establecer el valor a la propiedad calif
    public void Setname(float calif){
        this.calif=calif;
    }
}

A la mejor y te alarmes por que son muchas lineas de codigo, pero descuida el IDE que utilices debera contar
con erramientas que te permitan crear el codig de etos metodos instantaneamente.

En cuanto a tus clase donde tienes almacenado tus metodos que necesitas, se le realizarian las modificaciones
necesarias para adaptarlas al nuevo codigo de tu modelo o clase Alumno quedando de la siguiente manera.


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");
    string name = leer.nextLine();
    A.Setname(name); //Como te daras cuenta al decir Setname() identifico que estoy estableciendo un valor
        System.out.println("Da edad de " + A.Getname() + ": "); //De igual forma al decir Getname() me doy cuenta que estoy obteniendo un valor
    int edad=leer.nextInt();
        A.Setedad(edad);
        A.Setcalif((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.Getname(),A.Getedad(),A.Getcalif());    
    }
   
    static float promedio(float AlumnoA1 , float AlumnoA2, float AlumnoA3){  //Funcion
    float prom;
        prom = (AlumnoA1 + AlumnoA2 + AlumnoA3)/3;
       
        return prom;
    }
   
    /*
    *En este metodo que marcas o indicas que tienes tu problema identifico que solo estas realizando una unica validacion, dado
    *que si analisas bien tu problema requieres de mas validaciones, te recomendaria que usaras un array pero como vas iniciando
    *lo resolveremos de la forma larga
    */
    static Alumno mejor_calificacion (Alumno A1 , Alumno A2, Alumno A3){
    List<Alumno> listaAlumno=new ArrayList<Alumno>();    //Inicializamos una lista para hacer mas faciles las validaciones
   
    Alumno alumnoMayor=new Alumno();   
    alumnoMayor.Setcalif(0);

    //Te plantee la solucion de esta forma espero te sirva y si tienes las posibilidades de indagar un poco, te recomiendo que trates de
    //implementar un ciclo foreach.
    for(int i=0; i<listaAlumno.size(); i++){  //Espero y conoscas los bucles FOR
        if(listaAlumno.Get(i).Getcalif()>alumnoMayor.Getcalif()){
            alumnoMayor=listaAlumno.Get(i);
        }

    }
    return alumnoMayor;
        }
           
    }

    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 y te sirva de ayuda y perdona por reemplantear todo pero siempre hay que buscar la mejor forma posible de hacer codigo limpio

Preguntas relacionadas

0 votos
1 respuesta
preguntado por Subliminal30 (40 puntos) Ene 31, 2020 en Java
0 votos
1 respuesta
preguntado por davidrayking (20 puntos) Ene 28, 2016 en Java EE
+1 voto
0 respuestas
preguntado por clowy (30 puntos) Nov 12, 2019 en Java
Bienvenido a Dudas de Programación, donde puedes hacer preguntas y recibir respuestas sobre los problemas más frecuentes de los lenguajes de programación, frameworks de desarrollo y bases de datos que utilices. Foro de Línea de Código

Categorías

...