我收到了两个文件: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
我的意思是wt *?如果我愿意,这个功能可以正常工作:
s1.Kalk.PodajDzialanie(2, 2, "*");
答案 0 :(得分: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;
}
}
答案 1 :(得分: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();
}
答案 2 :(得分:2)
你的变量double userDouble;在while循环中声明,你需要将它移到外面。或者你的s1.Kalk.PodajDzialanie(userDouble,2,“*”);在它结束之前的while循环内部。
答案 3 :(得分:2)
您的变量userDouble
在块内声明,您尝试进行的调用在该块之外;因此,变量超出范围,因此在调用的上下文中不存在。
{
declaration;
work;
}
call; // doesn't work
但是这个 工作:
declaration;
{
work;
}
call; // OK