更新:通过将前两种方法结合在一起,我的结果变得可靠了。因此,问题在于方法二中引用的变量尚未初始化,即使方法一中也是如此。我可以用什么方式从方法2中引用方法1中double IntegralSlices的值?
我的任务是制作一个计算器,该计算器可收集每次聚会的客人人数和要求的披萨直径。然后,它将计算每个比萨饼的切片数和完成订单所需的比萨饼数。分配需要使用三种方法。
我已经在按钮事件处理程序的上下文中测试了以下代码,其中直径的测试数据为13.5,来宾数量的测试数据为6,并检查了结果。将代码放入这三种方法中,并使用事件处理程序对其进行调用,每次都会得到看似随机的结果。对于事件处理程序的每次后续单击,值都会略有增加。
#pragma endregion
private: Void GetSlicesPerPizza(double &pizzaDiameter, double &pizzaRadius, double &pizzaArea, double &IntegralSlices)
{
//calculate number of slices in a pizza of user-dtermined diameter
double::TryParse(txtDiameter->Text, pizzaDiameter);
pizzaRadius = pizzaDiameter / 2;
pizzaArea = 3.14159 * Math::Pow(pizzaRadius, 2);
IntegralSlices = Math::Floor(pizzaArea / 14.125);
}
private: Void GetNumberofPizzas(int &numberPeople, int &SlicesNeeded, double &IntegralSlices, double &IntegralPizzas)
//input number of people at party, determine slices per person, number of pizzas needed
{
Int32::TryParse(txtNumberOfPeople->Text, numberPeople);
SlicesNeeded = numberPeople * 4;
IntegralPizzas = Math::Ceiling(SlicesNeeded / IntegralSlices);
}
//display result
private: Void OutputPizzaData(double &IntegralSlices, double &IntegralPizzas)
{
txtSlicesPerPizza->Text = IntegralSlices.ToString();
txtPizzasNeeded->Text = IntegralPizzas.ToString();
private: System::Void btnCalculate_Click(System::Object^ sender, System::EventArgs^ e) {
//declare variables
double pizzaDiameter, pizzaRadius, pizzaArea, IntegralSlices, IntegralPizzas;
int numberPeople, SlicesNeeded;
//collect user-entered diameter and number of guests, calculate pizza area/slices
GetSlicesPerPizza(pizzaDiameter, pizzaRadius, pizzaArea, IntegralSlices);
//determine how many pizzas are needed given number of guests and pizza size
GetNumberofPizzas(numberPeople, SlicesNeeded, IntegralPizzas, IntegralSlices);
//output number of slices per pizza and number of pizzas per order
OutputPizzaData(IntegralPizzas, IntegralSlices);
给出13.5直径和6个人的测试数据,预期结果是10个IntegralSlices和3个IntegralPizzas。在事件处理程序中专门执行的代码给出了结果。
在一个这样的测试中,该方法给出任意数量的随机结果,然后对其进行递增:IntegralSlices:4.20327840774627E-293 IntegralPizzas:5.70982877455134E + 293
我对每次点击的增量的怀疑是,尽管输入值未更改,但在该方法下声明的变量被存储为实例变量,并为每次点击进行修改。其次,我不知道如何解释初始结果中的不一致之处。给定13.5直径和6个人的测试数据,结果应该是10个IntegralSlices和3个IntegralPizzas。这些方法的输出给我每次事件处理程序的初次点击都带来了无法预测的结果。