How to pass a value from one method to another method within the same class ? C#

Asked

Viewed 870 times

0

I would like to pass the tot variable that is in Registration float expenses to the Show expenses method. Can someone help me ??

class Ex4
{
    List<String> descricaodespesas = new List<string>();
    List<float> valordespesas = new List<float>();
    List<String> descricaoreceitas = new List<string>();
    List<float> valorreceitas = new List<float>();

    public void CadastroDespesas()
    {
        string descricao;
        float valor;
        float soma = 0,tot;
        Console.Write("Informe o valor: ");
        valor = Convert.ToSingle(Console.ReadLine());
        valordespesas.Add(valor);
        Console.WriteLine("Informe uma descrição:");
        descricao = (Console.ReadLine());
        descricaodespesas.Add(descricao);
        foreach (float som in valordespesas)
        {
            soma += valor;
        }
        tot = soma;
    }

    public void MostrarDespesas()
    {
        Console.WriteLine("------Despesas Informadas------");
        Console.WriteLine();
        for(int i = 0; i < descricaodespesas.Count; i++)
        {
            string desc = descricaodespesas.ElementAt(i);
            float valor = valordespesas.ElementAt(i);
            Console.Write("Descrição: "); Console.WriteLine(desc);
            Console.Write("Valor: "); Console.WriteLine(valor);
        }
        Console.ReadLine();
    }
  • 2

    put it outside the method in the general scope of the class then all methods will have access.

  • declares out, same as what made for the descricaodespesas

  • solved your problem?

  • Yes. Thank you all for your help.

3 answers

1

There are a few ways to do this. I will present two:

First solution:

 public void MostrarDespesas(float tot)
 {
     // Agora você tem acesso ao valor que está no tot, faça o que quiser com ele
     Console.WriteLine("------Despesas Informadas------");
     Console.WriteLine();
     for(int i = 0; i < descricaodespesas.Count; i++)
     {
         string desc = descricaodespesas.ElementAt(i);
         float valor = valordespesas.ElementAt(i);
         Console.Write("Descrição: "); Console.WriteLine(desc);
         Console.Write("Valor: "); Console.WriteLine(valor);
     }
     Console.ReadLine();
}

From now on, anytime you want to call the method MostrarDespesas(float tot), you will have to enter a float value per parameter. I used as an example its variable tot:

tot = 100;

MostrarDespesas(tot);

Second solution:

Or using the idea given by @Virgilio, declare the variable tot as a class variable, you can use it anywhere in your class:

class Ex4
{
    List<String> descricaodespesas = new List<string>();
    List<float> valordespesas = new List<float>();
    List<String> descricaoreceitas = new List<string>();
    List<float> valorreceitas = new List<float>();
    float _tot; // Variável tot declarada como variável de classe
}

It is no longer necessary to declare the tot here because it has already been declared at the top of the class (code above):

public void CadastroDespesas()
{
    string descricao;
    float valor;
    float soma = 0; // Declaração removida 'tot''
    Console.Write("Informe o valor: ");
    valor = Convert.ToSingle(Console.ReadLine());
    valordespesas.Add(valor);
    Console.WriteLine("Informe uma descrição:");
    descricao = (Console.ReadLine());
    descricaodespesas.Add(descricao);
    foreach (float som in valordespesas)
    {
        soma += valor;
    }

    // Utilize a variável _tot
    _tot = soma;
}

From now on, you can access the variable _tot of any place in its class, the value of the sum.

  • 1

    Ball show guys, thank you all for your help.

  • No problem! If the answer helped you, mark it as the correct one to help other people with the same question!

0

You are doing some unnecessary things in your method.

public void CadastroDespesas()
{
    string descricao;
    float valor;
    float soma = 0,tot;
    Console.Write("Informe o valor: ");
    valor = Convert.ToSingle(Console.ReadLine());
    valordespesas.Add(valor);
    Console.WriteLine("Informe uma descrição:");
    descricao = (Console.ReadLine());
    descricaodespesas.Add(descricao);
    foreach (float som in valordespesas)
    {
        soma += valor;
    }
    tot = soma;
}

Let’s simplify to;

public void CadastroDespesas()
{
    string descricao;
    float valor;
    Console.Write("Informe o valor: ");
    valor = Convert.ToSingle(Console.ReadLine());
    valordespesas.Add(valor);
    Console.WriteLine("Informe uma descrição:");
    descricao = (Console.ReadLine());
    descricaodespesas.Add(descricao);   
}

And in your other method just access your list to recover the values using the Sum().

   public void MostrarDespesas()
    {
        Console.WriteLine("------Despesas Informadas------");
        Console.WriteLine();
        for(int i = 0; i < descricaodespesas.Count; i++)
        {
            string desc = descricaodespesas.ElementAt(i);
            float valor = valordespesas.ElementAt(i);
            Console.Write("Descrição: "); Console.WriteLine(desc);
            Console.Write("Valor: "); Console.WriteLine(valor);
        }

// Basta usar o Sum do linq na sua lista para recuperar o valor total
        var tot = valordespesas.Sum();
        Console.ReadLine();
    }

0

You can return the value of tot from within the function CadastroDespesas exchanging void by the type of varivell you want to return, in your case is a float, its function would have this header:

public float CadastroDespesa(){

}

And at the end of it you return tot:

return tot;

Now you need to change the method MostrarDespesas asking for a float to be displayed:

 public void MostrarDespesas(float valorTotalDespesas)
 {
 }

The correct thing is first you receive the value of CadastroDespesa and then call MostrarDespesas passing the amount received:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;

namespace Rextester
{
    public class Program
    {
        public static void Main(string[] args)
        {
            Ex4 DespesaManager = new Ex4();
            float tot = DespesaManager.CadastroDespesa();
            DespesaManager.MostrarDespesas(tot);
        }
    }
}

This is how you would use the changes. Your code itself looks like this:

class Ex4
{
    List<String> descricaodespesas = new List<string>();
    List<float> valordespesas = new List<float>();
    List<String> descricaoreceitas = new List<string>();
    List<float> valorreceitas = new List<float>();

    public float CadastroDespesas()
    {
        string descricao;
        float valor;
        float soma = 0,tot;
        Console.Write("Informe o valor: ");
        valor = Convert.ToSingle(Console.ReadLine());
        valordespesas.Add(valor);
        Console.WriteLine("Informe uma descrição:");
        descricao = (Console.ReadLine());
        descricaodespesas.Add(descricao);
        foreach (float som in valordespesas)
        {
            soma += valor;
        }
        tot = soma;
        return tot;
    }

    public void MostrarDespesas(float valorTotalDespesas)
    {
         Console.WriteLine("------Despesas Informadas------");
         Console.WriteLine();
         for(int i = 0; i < descricaodespesas.Count; i++)
         {
             string desc = descricaodespesas.ElementAt(i);
             float valor = valordespesas.ElementAt(i);
             Console.Write("Descrição: "); Console.WriteLine(desc);
             Console.Write("Valor: "); Console.WriteLine(valor);
          }
          Console.WriteLine("Valor total: "); 
          Console.WriteLine(valorTotalDespesas);
          Console.ReadLine();
     }

This is your way of doing it, but I think it would be more interesting to use the list itself valordespesas to add, you can use LINQ like this:

valordespesas.Sum();

So you wouldn’t need to return anything in your duties, MostrarDespesas gets like this:

    public void MostrarDespesas()
    {
         Console.WriteLine("------Despesas Informadas------");
         Console.WriteLine();
         for(int i = 0; i < descricaodespesas.Count; i++)
         {
             string desc = descricaodespesas.ElementAt(i);
             float valor = valordespesas.ElementAt(i);
             Console.Write("Descrição: "); Console.WriteLine(desc);
             Console.Write("Valor: "); Console.WriteLine(valor);
          }
          Console.WriteLine("Valor total: "); 
          Console.WriteLine(valordespesas.Sum());
          Console.ReadLine();
     }
  • I can not mark the answers as correct, maybe it is because I asked the question as a visitor, but already solved my problem, I thank everyone for their help. (I created an account now but he doesn’t recognize this question as my own.)

Browser other questions tagged

You are not signed in. Login or sign up in order to post.