我正在制作一台“自动售货机”,我需要索引总销售量以及机器中剩余的饮料量。现在,当用户点击苏打水的图片时,我会设置它,它会执行逻辑。以下是完整的类:结构和结构的对象在类中属于哪里?
namespace _8_11
{
struct Drink
{
public string Name;
public float Price;
public int Amount;
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
object[,] Cola = new object[,]
{
{"Coke", 1.00f, 20 },
{"Beer", 1.00f, 20 },
{"Sprite",1.00f, 20 },
{"Grape", 1.50f, 20 },
{"Cream", 1.50f, 20 }
};
float total = 0.00f;
private void pictureBox1_Click(object sender, EventArgs e)
{
Drink Coke = new Drink();
Coke.Name = (string)Cola[0, 0];
Coke.Price = (float)Cola[0, 1];
Coke.Amount = (int)Cola[0, 2];
if (Coke.Amount > 1 && Coke.Amount <= 20)
{
Coke.Amount -= 1;
total += Coke.Price;
cokeLeftLabel.Text = Coke.Amount.ToString();
totalSalesLabel.Text = total.ToString("c");
}
else {
MessageBox.Show("We are out of Coke!");
}
}
}
}
的主要问题是代码:
Drink Coke = new Drink();
Coke.Name = (string)Cola[0, 0];
Coke.Price = (float)Cola[0, 1];
Coke.Amount = (int)Cola[0, 2];
当过用户点击图片,这些变量被重置。我需要在clicked方法之外初始化这些变量,但是当我尝试将它们移到此方法之外时,它会给出一个编译错误“Coke.Amount在当前上下文中不存在”。
我修好了。下面是修改后的代码:
if (Coke.Amount > 0 && Coke.Amount <= 20)
{
Coke.Amount -= 1;
Cola[0, 2] = Coke.Amount;
total += Coke.Price;
cokeLeftLabel.Text = Coke.Amount.ToString();
totalSalesLabel.Text = total.ToString("c");
}
在Class中创建一个公共Drink变量,这将使其可用于课堂以外的所有方法。如果你也使它成为静态的,这也会使其他类可用。你尝试过这样做吗? – vipersassassin
你的直接问题是范围限定,但请注意,在这种情况下没有理由使用'struct',并且会导致比解决问题更多的问题。如果您将'Drink'从'struct'更改为'class',您将避免可变结构创建更多问题。 –
如果您的老师告诉您为此使用二维数组,则他的犯罪行为是疯狂的。你应该仍然按照他的说法来完成这项任务,但是如果他邀请你检查他的集装箱,请记得礼貌地拒绝。 –