C# 控制台应用程序 - 变量中的常量零值
本文关键字:常量 变量 控制台 应用程序 | 更新日期: 2023-09-27 18:33:39
我几乎让我的小控制台应用程序工作了,唯一的问题是变量totalComm
的值一直为 0。
尝试了一切,我可能只是忽略了一个可以解决问题的小修复。
提前致谢
菲利普
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CommissionCalculator
{
class Program
{
public static void Main()
{
double total;
double comm = 0;
double totalComm = 0;
string name = "";
string inputLetter = "";
int whilecount = 0;
while (inputLetter != "z")
{
if (whilecount == 0)
{
Title();
whilecount = whilecount + 1;
}
getNameSales(out inputLetter, out name, out total, comm, totalComm);
calcComm(total, out comm);
outputVar(name, total, comm);
totalCommCalc(comm, totalComm);
}
}
public static void Title()
{
Console.WriteLine("'n Sunshine Hot Tubs 'n Sales Commissions Report'n");
}
public static void getNameSales(out string inputLetter, out string name, out double total, double comm, double totalComm)
{
name = "";
inputLetter = "";
total = 0;
Console.WriteLine("'nEnter salespersons initial a,b or e or enter z to quit");
inputLetter = Console.ReadLine();
if (inputLetter == "a")
{
name = "Andrea";
string inValue;
double sale = 0;
total = 0;
for (int count = 1; count <= 3; ++count)
{
Console.WriteLine("Please enter sale: ");
inValue = Console.ReadLine();
sale = Convert.ToDouble(inValue);
total = total + sale;
}
}
else if (inputLetter == "b")
{
name = "Brittany";
string inValue;
double sale = 0;
total = 0;
for (int count = 1; count <= 3; ++count)
{
Console.WriteLine("Please enter sale: ");
inValue = Console.ReadLine();
sale = Convert.ToDouble(inValue);
total = total + sale;
}
}
else if (inputLetter == "e")
{
name = "Eric";
string inValue;
double sale = 0;
total = 0;
for (int count = 1; count <= 3; ++count)
{
Console.WriteLine("Please enter sale: ");
inValue = Console.ReadLine();
sale = Convert.ToDouble(inValue);
total = total + sale;
}
}
else if (inputLetter == "z")
{
totalCommCalc(comm, totalComm);
Console.WriteLine("Total commssion paid: {0:C}", totalComm);
Console.ReadKey();
}
}
public static void calcComm(double total, out double comm)
{
comm = total * 0.2;
}
public static double totalCommCalc(double comm, double totalComm)
{
totalComm = totalComm + comm;
return totalComm;
}
public static void outputVar(string name, double total, double comm)
{
Console.WriteLine("'n Name't Total sales't Commission 'n{0} 't {1} 't {2}", name, total, comm);
}
}
}
totalComm 按值传递给 totalCommCalc。 要么通过引用传递它,要么从 totalCommCalc 返回它并重新分配给 totalComm。
当变量按值传递时,副本将放置在您调用的方法的堆栈上。 对该副本的更改不会影响原始副本。
通过引用传递时,原始文件的地址将放置在堆栈上,并且更改会影响原始文件。
选项 1:
// Passed by reference.
// Changes affect original.
// Has side effects. See http://en.wikipedia.org/wiki/Side_effect_%28computer_science%29
totalCommCalc(comm, ref totalComm);
选项 2:
// Preferred. Passed by value.
// Result is assigned to a variable.
// No side effects.
totalComm = totalCommCalc(comm, totalComm);
我更喜欢第二种形式,因为随着代码的增长,具有副作用的代码可能更难理解和维护。
对"totalCommCalc"的调用应该存储返回值或使用out关键字,就像其他方法一样。为了与您的其他方法保持一致,我将使用 out 并删除返回值。
totalCommCalc(comm, out totalComm);
或
totalComm = totalCommCalc(comm, totalComm)
您
是通过值而不是按引用传入totalComm
的。 如果希望保留要totalComm
的更改,请将其设置为ref
参数,或者,如果适用,从函数返回值。
要通过引用传递:
....
getNameSales(out inputLetter, out name, out total, comm, ref totalComm);
....
public static void getNameSales(out string inputLetter, out string name, out double total, double comm, ref double totalComm)
不要使用ref
(根据 @Eric J:随着代码的增长,具有副作用的代码可能更难理解和维护)
只需更改一行,即为变量分配函数返回值。
totalComm = totalCommCalc(comm, totalComm);
就是这样。