none
¿cómo hago para retornar más de un valor? RRS feed

  • Pregunta

  • Hola, Quisiera saber si se puede retornar más de un valor ya que quiero retornar mis variables "con" "con2" "con3" "con4" y b de la función "s": 

                                                                 

     static void Main(string[] args)
            {
                int i = 1, con = 1, con2 = 1, con3 = 1, con4 = 1, a;
                double b = 0, z = 0, f, t  = 0;
                string c = null;
                do
                {
                    Console.WriteLine("1. Ingreso de estudiantes y calificaciones\n" +
                        "2. Estadística de calificaciones\n" +
                        "3. salir");
                    a = int.Parse(Console.ReadLine());

                    if (a == 1)
                    {

                        Console.WriteLine("para dejar de ingresar notas ingrese: -1 en el apartado de nota");


                            f = s(b, c, i, con, con2, con3, con4);

                } while (a != 3);
            }

            static double s(double b, string c, int i, int con, int con2, int con3, int con4)
            {
                do
                {
                    Console.WriteLine("ingrese el nombre y el apellido del estudiante " + i);
                    c = Console.ReadLine();
                    Console.WriteLine("ingrese la nota del estudiante " + i);
                    b = double.Parse(Console.ReadLine());

                    if (b >= 90)
                    {
                        con++;
                    }
                    if (b > 74 && b < 90)
                    {
                        con2++;
                    }
                    if (b > 64 && b < 75)
                    {
                        con3++;
                    }
                    if (b < 65 && b > 0)
                    {
                        con4++;
                    }
                } while (b != -1);

                return b;


            }

    jueves, 17 de octubre de 2019 2:45

Todas las respuestas

  • Hola, Quisiera saber si se puede retornar más de un valor ya que quiero retornar mis variables "con" "con2" "con3" "con4" y b de la función "s": 

    Ponles en la declaración de "s" el modificador "out" si son solo de salida, o "ref" si son de entrada/salida:

    static double s(double b, string c, int i, out int con, out int con2, out int con3, out int con4)

    y luego desde donde llames a "s" tienes que poner también out antes de cada variable:

     f = s(b, c, i, out con, out con2, out con3, out con4);

    jueves, 17 de octubre de 2019 6:47
    Moderador
  • hola

    Usas class para devolver varios valores

    igual lo que no entiendo es porque usas el do..while si despues parece que solo puedes ingresar un unico estudiante, como que no tiene sentido pedir datos en un loop si despues los acumulas y los datos de un estudiando pisan los anteriores, quizas debas usar un List<> o array

    creas una class como ser

    public class Estudiante{
    	public string nombre {get;set;}
    	public double nota {get;set;}
    	
    	public int con {get;set;}
    	public int con2 {get;set;}
    	public int con3 {get;set;}
    	public int con4 {get;set;}
    }


    para luego usarla

    static Estudiente s(int i)
    {
    	Estudiante estudiante = new Estudiante();
    	
    	Console.WriteLine("ingrese el nombre y el apellido del estudiante " + i);
    	estudiante.nombre = Console.ReadLine();
    	
    	Console.WriteLine("ingrese la nota del estudiante " + i);
    	estudiante.nota = double.Parse(Console.ReadLine());
    
    	if (estudiante.nota >= 90)
    	{
    		estudiante.con++;
    	}
    	if (estudiante.nota > 74 && estudiante.nota < 90)
    	{
    		estudiante.con2++;
    	}
    	if (estudiante.nota > 64 && estudiante.nota < 75)
    	{
    		estudiante.con3++;
    	}
    	if (estudiante.nota < 65 && estudiante.nota > 0)
    	{
    		estudiante.con4++;
    	}
    
    	return estudiante;
    
    }

    si tienes que pasas "i" porque entiendo eso lo decides por fuera, pero despues los datos internos los capturas y armas la entidad estudiente que retornas

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    jueves, 17 de octubre de 2019 15:12
  • Hola, lo otro que podrías hacer es retornar un arreglo. Estático porque retornarás siempre 5 elementos.

    static double[] s(double b, string c, int i, int con, int con2, int con3, int con4)
    {
    
    double[] ret = new double[5];
    ret[0] = Convert.ToDouble(con);
    ret[1] = Convert.ToDouble(con2);
    ret[2] = Convert.ToDouble(con3);
    ret[3] = Convert.ToDouble(con4);
    ret[4] = Convert.ToDouble(b);
    
    return ret;
    }
    Saludos

    jueves, 17 de octubre de 2019 15:25