-1

我收到了两个文件:Sumator.cs 和 Kalkulator.cs @ Visual Studio 2012

我想你不需要看那两个,但我确实把它们放在这里,去页面看看我的问题。

Sumator.cs代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Sumator2
{
class Sumator
{
    bool Status = false;
    double Suma = 0;
    public Kalkulator Kalk = new Kalkulator();
    public Sumator()
    {
    }

    public void ZmienStatus()
    {
        Status = !Status;
    }
    public string PokazStatus()
    {

        if (Status == true)
            return " Sumator włączony";
        else
            return " Sumator wyłaczony";

    }

    public void PokazWynikS()
    {
        if (Status == true)
            Suma += Kalk.Wynik;
        Console.WriteLine("Wynik działania : " + Kalk.L1.ToString() + " " + Kalk.Dzialanie.ToString() + " " + Kalk.L2.ToString() + " = " + Kalk.Wynik.ToString() + PokazStatus() + "   Suma= " + Suma.ToString());
    }

    public void Zeruj()
    {
        Suma = 0;
    }
}
}

Kalkulator.cs代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Sumator2
{
class Kalkulator
{
    public double L1;
    public double L2;
    public double Wynik;
    public String Dzialanie = "";
    public Kalkulator()
    {
    }
      void Oblicz()
    {
        switch (Dzialanie)
        {
            case "+":
                Wynik = L1 + L2;
                break;
            case "-":
                Wynik = L1 - L2;
                break;
            case "*":
                Wynik = L1 * L2;
                break;
            case "/":
                Wynik = L1 / L2;
                break;

        }
    }
    public void PodajDzialanie(double licz1, double licz2, string dz)
    {
        L1 = licz1;
        L2 = licz2;
        Dzialanie = dz;
        Oblicz();

    }
    public void PokazWynik()
    {
        Console.WriteLine("Wynik działania : " + L1.ToString() + " " + Dzialanie.ToString() + " " + L2.ToString() + " = " + Wynik.ToString());
    }

}
}

我已经为这两个编写了我的主要代码。 Program.cs代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Sumator2
{
class Program
{
    static void Main(string[] args)
    {
        Sumator s1 = new Sumator();

        s1.ZmienStatus();

        bool userNum = true;
        while (userNum)
        {
            double userDouble;
            string userString = Console.ReadLine();

            if (userNum = double.TryParse(userString, out userDouble))
            {
                userDouble = Convert.ToDouble(userString);
                userNum = false;
            }
            else 
            {
                Console.WriteLine("Nie podano liczby!");
                userNum = true;
            }
        }


        s1.Kalk.PodajDzialanie(userDouble, 2, "*");
        s1.PokazWynikS();
        s1.Kalk.PokazWynik();

        s1.Kalk.PodajDzialanie(userDouble, 2, "+");
        s1.PokazWynikS();
        s1.Kalk.PokazWynik();


        Console.ReadKey();
    }
}
}

问题是我想将 s1.Kalk.PodajDzialanie() 函数与这些参数一起使用:

 s1.Kalk.PodajDzialanie(userDouble, 2, "*");

我得到了如下错误:

 The name 'userDouble' does not exists in the current context

我的意思是重量*?如果我喜欢,此功能可以正常工作:

 s1.Kalk.PodajDzialanie(2, 2, "*");
4

4 回答 4

10

userDouble在你的while循环中声明。一旦你离开那个循环,它就超出了范围。将它移到循环之前,你应该没问题。所以你有:

bool userNum = true;
double userDouble;
while (userNum)
{      
    string userString = Console.ReadLine();

    // Jesli sa liczby to convertujemy
    if (userNum = double.TryParse(userString, out userDouble))
    {
        userDouble = Convert.ToDouble(userString);
        userNum = false;
    }
    else 
    {
        Console.WriteLine("Nie podano liczby!");
        userNum = true;
    }
}
于 2012-11-15T15:05:43.407 回答
2

您在函数无权访问的范围内声明 userDouble。

将您的代码更改为:

static void Main(string[] args)
    {
        Sumator s1 = new Sumator();
        double userDouble; //moved declaration out of while loop

        s1.ZmienStatus();

        // Sprawdzanie czy w stringu sa liczby
        bool userNum = true;
        while (userNum)
        {

            string userString = Console.ReadLine();

            // Jesli sa liczby to convertujemy
            if (userNum = double.TryParse(userString, out userDouble))
            {
                userDouble = Convert.ToDouble(userString);
                userNum = false;
            }
            else 
            {
                Console.WriteLine("Nie podano liczby!");
                userNum = true;
            }
        }


        s1.Kalk.PodajDzialanie(userDouble, 2, "*");
        s1.PokazWynikS();
        s1.Kalk.PokazWynik();

        s1.Kalk.PodajDzialanie(userDouble, 2, "+");
        s1.PokazWynikS();
        s1.Kalk.PokazWynik();


        Console.ReadKey();
    }
于 2012-11-15T15:06:24.153 回答
2

你的变量 double userDouble; 在 while 循环中声明,您需要将其移到外面。或者 mvoe 你的 s1.Kalk.PodajDzialanie(userDouble, 2, "*"); 在while循环结束之前。

于 2012-11-15T15:06:42.673 回答
2

您的变量userDouble在块内声明,而您尝试执行的调用位于该块之外;因此,该变量超出范围,因此在调用的上下文中不存在。

{
   declaration;
   work;
}

call; // doesn't work

但这确实有效:

declaration;
{
    work;
}

call; // OK
于 2012-11-15T15:06:48.270 回答