-1

Sumator.cs と Kalkulator.cs @ Visual Studio 2012の 2 つのファイルを受け取りました。

これらの 2 つを見る必要はないと思いますが、とにかくここに置いたので、ページを下って問題を確認してください。

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());
    }

}
}

この 2 つのメイン コードを書きました。 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

私はwt *を意味しますか?私が好きなら、この機能は正常に動作します:

 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 ループ内で宣言されている場合は、外側に移動する必要があります。または、あなたの 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 に答える