C#问题并将方法传递给数组 [英] Issue with C# and passing methods to arrays
问题描述
我正在编写一个非常新的编程介绍。我正在学习C#并编写一个利用数组和方法的程序,我遇到了问题。
该程序应该提示一个菜单,创建一个新用户然后请求一个号码(销售),删除一个用户,清除数组,列出用户。还有佣金率,当输入特定数字(销售额)时,它会按百分比计算,并将该数字显示为佣金。在列表中,它还将所有销售汇总成一个组合数字以及旁边的佣金。这是迄今为止我所拥有的。我在接近底部看到的传递一个数组方法时遇到了麻烦。
I am taking an intro to programming so very new to it. I am learning C# and writing a program that utilizes arrays and methods and I am having an issue with.
The program is supposed to prompt a menu that, creates a new user and then asks for a number(sales), delete a user, clears the array, lists the user. Theres also a commission rate that when a specific number is entered (sales) it times by a percentage and displays that number as commission. In the list it is also to compile all sales into a combined number as well as commission beside it. Heres what i have so far. I am having troubles passing a method an array as seen in the near bottom.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CPSC1012_CP3_FarkasdiJonah
{
class Program
{
static void Main(string[] args)
{
double placeholder1 = 0, placeholder2 = 0;
char menuchoice;
const int max_salepersons = 11;
int salespersons = 0;
string[] salespersonsName = new string[max_salepersons];
double[] sales = new double[max_salepersons];
double[] salepersonsCom = new double[max_salepersons];
do
{
Console.WriteLine("Sales Commissions Calculator - Main Menu\n");
Console.WriteLine("Select an option:" +
"\n 1 - Add Sales" +
"\n 2 - Remove Sales" +
"\n 3 - Clear Data" +
"\n 4 - Display Sales and Commissions" +
"\n 5 - Exit");
Console.Write("Option: ");
menuchoice = char.Parse(Console.ReadLine());
switch (menuchoice)
{
case '1':
{
if (salespersons < max_salepersons)
{
salespersonsName[salespersons] = GetValidName("Enter
the player name: ");
if
(salespersonsName[salespersons].Equals(salespersonsName))
{
Console.WriteLine("That name is already registered");
}
else
{
sales[salespersons] = GetSafeDecimal("Enter their sales: ");
Console.WriteLine("PlayerName: {0}, PlayerNumber: {1} was added",
salespersonsName[salespersons], sales[salespersons]);
salespersons++;
}
}
else
{
Console.WriteLine("The list is full");
}
Console.Clear();
break;
}
case '2':
{
Console.Clear();
break;
}
case '3':
{
Console.Clear();
break;
}
case '4':
{
Console.WriteLine("------------------- Sales & Commissions Data -------------------\n");
Console.WriteLine("Sales Person Sales Commission");
Console.WriteLine("----------------------------------------------------------------");
DisplayData(salespersonsName, sales, salepersonsCom, ref salespersons);
Console.WriteLine("----------------------------------------------------------------");
Console.WriteLine("{0,30}{1,14:c}{2,12:c}", "Totals:", placeholder1, placeholder2);
Console.Write("");
ConsoleKeyInfo key = Console.ReadKey();
if (key.Key.Equals(ConsoleKey.Enter))
{
Console.Clear();
}
else
{
Console.Clear();
}
break;
}
case '5':
{
Console.WriteLine("\nThanks for using the Sales Commissions Calculator ... come again soon");
Console.Write("");
ConsoleKeyInfo key = Console.ReadKey();
Environment.Exit(0);
break;
}
}
}
while (menuchoice != 5);
Console.ReadLine();
}
static string GetValidName(string prompt)
{
string validname;
Console.WriteLine(prompt);
validname = Console.ReadLine();
while (string.IsNullOrEmpty(validname))
{
Console.WriteLine("ERROR: Please enter a valid name", prompt);
validname = Console.ReadLine();
}
return validname;
}
static double GetSafeDecimal(string prompt)
{
string checkifsafedecimal;
double validdecimal;
Console.WriteLine(prompt);
checkifsafedecimal = Console.ReadLine();
while (!double.TryParse(checkifsafedecimal, out validdecimal) || validdecimal < 0)
{
Console.WriteLine("ERROR: Please enter a valid sales number {0}", prompt);
checkifsafedecimal = Console.ReadLine();
}
return validdecimal;
}
static double CalculateCommission(double sales, ref int salespersons, double[] salepersonsCom)
{
if (sales > 200000)
{
salepersonsCom[salespersons] = 0.07;
}
else if(sales > 125000)
{
salepersonsCom[salespersons] = 0.06;
}
else if(sales > 50000)
{
salepersonsCom[salespersons] = 0.05;
}
else if(sales < 50000)
{
salepersonsCom[salespersons] = 0.04;
}
else if(sales == 0)
{
salepersonsCom[salespersons] = 0;
}
salepersonsCom[salespersons] = (salepersonsCom[salespersons] * sales);
return salepersonsCom[salespersons];
}
//static double CalculateTotalSales(params…)
//{
//}
//static double CalculateTotalCommissions(params…)
//{
//}
static void DisplayData(string[] salespersonsName, double[] sales, double[] salepersonsCom, ref int salespersons)
{
Console.Clear();
if (salespersons > 0)
{
for (int index = 0; index < salespersons; index++)
{
Console.WriteLine("------------------- Sales & Commissions Data -------------------\n");
Console.WriteLine("Sales Person Sales Commission");
Console.WriteLine("----------------------------------------------------------------");
Console.WriteLine("{0,0}{1,14:c}{2,12:c}", salespersonsName[index], sales[index],
CalculateCommission(salepersonsCom[salespersons])[index]);
Console.WriteLine("----------------------------------------------------------------");
Console.WriteLine("{0,30}", "Totals:");
}
}
else
{
Console.WriteLine("------------------- Sales & Commissions Data -------------------\n");
Console.WriteLine("Sales Person Sales Commission");
Console.WriteLine("----------------------------------------------------------------");
}
}
}
}
我尝试了什么:
guesstimating,youtube视频,网站
What I have tried:
guesstimating, youtube videos, websites
推荐答案
查看您的错误消息错误窗格。双击消息会将您带到它所关注的行。他们很好地描述了这个问题!
Look at your error messages in the Error Pane. Double clicking on a message takes you to the line that it concerns. They describe the problem pretty well!
"Newline in constant"
salespersonsName[salespersons] = GetValidName("Enter
the player name: ");
除非前缀为'@',否则字符串不能跨行。删除换行符:
Strings can't cross lines unless they are prefixed with '@'. Remove the newline:
salespersonsName[salespersons] = GetValidName("Enter the player name: ");
问题就消失了。
解决这个问题,然后又出现了另一个错误:
And the problem goes away.
Fix that, and you get another error:
No overload for method 'CalculateCommission' takes 1 arguments
CalculateCommission(salepersonsCom[salespersons])[index]);
查看方法本身:
static double CalculateCommission(double sales, ref int salespersons, double[] salepersonsCom)
{
...
}
这需要三个参数。
提供参数!
That needs three parameters.
Supply the parameters!
这篇关于C#问题并将方法传递给数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!