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

0

I'd like to pass the tot variable that is in Cash Expense in float to the Show Expense method. Can anyone 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();
    }
    
asked by anonymous 14.03.2018 / 14:42

3 answers

1

There are a few ways to do this. I'll introduce 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, when you want to call the MostrarDespesas(float tot) method, you must enter a float value per parameter. I used your tot variable as an example:

tot = 100;

MostrarDespesas(tot);

Second solution:

Or using the idea given by @Virgilio, declare the variable tot as a class variable, and 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 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 from anywhere in your class, by adding the value of the sum.

    
14.03.2018 / 14:49
0

You're 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 for;

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 retrieve 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();
    }
    
14.03.2018 / 14:56
0

You can return the value of tot from within the function CadastroDespesas by changing void to the type of variable you want to return, in your case it is 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 MostrarDespesas method by asking for a float to be displayed:

 public void MostrarDespesas(float valorTotalDespesas)
 {
 }

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

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, however I think it would be more interesting to use the valordespesas list to add, you can use LINQ like this:

valordespesas.Sum();

So you would not have to return anything in your functions, MostrarDespesas looks 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();
     }
    
14.03.2018 / 15:06