C# 运行FOR循环,从默认构造函数c创建4个水管工#
正如您在上面的标题中看到的,我需要运行FOR循环,从默认构造函数创建4个水管工。创建后(在FOR循环中),更改其名称,将其添加到员工列表并显示在列表框中。所以基本上,水管工实际上是在另一个叫做EmployeeList的类中声明的列表。Wehn我试着把他们的名字改成随机的,我得到了一个错误消息,说“索引超出范围”。有人能帮我吗 表格代码C# 运行FOR循环,从默认构造函数c创建4个水管工#,c#,C#,正如您在上面的标题中看到的,我需要运行FOR循环,从默认构造函数创建4个水管工。创建后(在FOR循环中),更改其名称,将其添加到员工列表并显示在列表框中。所以基本上,水管工实际上是在另一个叫做EmployeeList的类中声明的列表。Wehn我试着把他们的名字改成随机的,我得到了一个错误消息,说“索引超出范围”。有人能帮我吗 表格代码 public partial class Form1 : Form { public Form1() { InitializeCo
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//create class-level employee list
EmployeeList plumbers = new EmployeeList();
private void Form1_Load(object sender, EventArgs e)
{
//run a for loop to create 4 plumbers from the default constructor.
for (int i = 0; i < plumbers.Count; i++)
plumbers[i] = new Employee();
//After they are created (within the FOR loop), change their names,
//plumbers[0].Name = "Nicole Fernandez";
//add them to the employee list
//display in listbox
foreach (Employee item in plumbers.Employees)
{
lstDisplay.Items.Add(item.DisplayData());
}
}
class EmployeeList
{
//use private access modifier to create a list of employee
private List<Employee> employees = new List<Employee>();
public List<Employee> Employees
{
get { return employees; }
set { employees = value; }
}
//return the count of the employee list, use lambda operator
public int Count => employees.Count();
//create default constructor
public EmployeeList() { }
//create a method that adds employee sent to the list. No return value
public void AddEmp(Employee emp)
{
employees.Add(emp);//add employee to the list
}
//create employee from data sent. No return value
public void AddEmp(string inName, int inID, decimal inHourlyWage)
{
//declare a variable
Employee emp = new Employee(inName, inID, inHourlyWage);
//call the other AddEmp
AddEmp(emp);
}
//create a method that deletes employee from the list. No return value
public void DeleteEmp(Employee emp) => employees.Remove(emp);
//insert employee at the index
public void InsertEmp(Employee emp, int index) => employees.Insert(index, emp);
//create an indexer
public Employee this[int i]
{ //q12 - indexer property with exception
get
{
if (i < 0 || i >= Count)
throw new ArgumentOutOfRangeException(i.ToString());
return employees[i];
}
set { employees[i] = value; }
}
}
class Employee
{
//use auto-implemented property
public int ID { get; set; }
public string Name { get; set; }
public decimal HourlyWage { get; set; }
public decimal TotalPay { get; set; }
//create static integer that starts at 1
private static int NextID = 1;
//create a default constructor with default values
public Employee()
{
ID = NextID++;
Name = "John Doe";
HourlyWage = 15.25m;
TotalPay = 0.0m;
}
//create the custom constructor sending in 3 parameters
public Employee(string inName, int inID, decimal inHourlyWage)
{
Name = inName;//set name, no validation is required
//validate ID is between 1 and 250. if not, set to nextID available
if (inID <= 1 && inID >= 250)
NextID = inID;
//validate hourly wage is between 12.50 and 20. If not, set to 15.25
if (inHourlyWage <= 12.50m && inHourlyWage >= 20.0m)
inHourlyWage = 15.25m;
TotalPay = 0;//set total pay to 0
}
public string DisplayData() => ID + "\t" + Name + "\t" + HourlyWage.ToString("c") + "\t" + TotalPay.ToString("c");
}
公共部分类表单1:表单
{
公共表格1()
{
初始化组件();
}
//创建班级级员工列表
EmployeeList水管工=新EmployeeList();
私有void Form1\u加载(对象发送方、事件参数e)
{
//运行for循环,从默认构造函数创建4个水管工。
对于(int i=0;i
员工名单类别代码
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//create class-level employee list
EmployeeList plumbers = new EmployeeList();
private void Form1_Load(object sender, EventArgs e)
{
//run a for loop to create 4 plumbers from the default constructor.
for (int i = 0; i < plumbers.Count; i++)
plumbers[i] = new Employee();
//After they are created (within the FOR loop), change their names,
//plumbers[0].Name = "Nicole Fernandez";
//add them to the employee list
//display in listbox
foreach (Employee item in plumbers.Employees)
{
lstDisplay.Items.Add(item.DisplayData());
}
}
class EmployeeList
{
//use private access modifier to create a list of employee
private List<Employee> employees = new List<Employee>();
public List<Employee> Employees
{
get { return employees; }
set { employees = value; }
}
//return the count of the employee list, use lambda operator
public int Count => employees.Count();
//create default constructor
public EmployeeList() { }
//create a method that adds employee sent to the list. No return value
public void AddEmp(Employee emp)
{
employees.Add(emp);//add employee to the list
}
//create employee from data sent. No return value
public void AddEmp(string inName, int inID, decimal inHourlyWage)
{
//declare a variable
Employee emp = new Employee(inName, inID, inHourlyWage);
//call the other AddEmp
AddEmp(emp);
}
//create a method that deletes employee from the list. No return value
public void DeleteEmp(Employee emp) => employees.Remove(emp);
//insert employee at the index
public void InsertEmp(Employee emp, int index) => employees.Insert(index, emp);
//create an indexer
public Employee this[int i]
{ //q12 - indexer property with exception
get
{
if (i < 0 || i >= Count)
throw new ArgumentOutOfRangeException(i.ToString());
return employees[i];
}
set { employees[i] = value; }
}
}
class Employee
{
//use auto-implemented property
public int ID { get; set; }
public string Name { get; set; }
public decimal HourlyWage { get; set; }
public decimal TotalPay { get; set; }
//create static integer that starts at 1
private static int NextID = 1;
//create a default constructor with default values
public Employee()
{
ID = NextID++;
Name = "John Doe";
HourlyWage = 15.25m;
TotalPay = 0.0m;
}
//create the custom constructor sending in 3 parameters
public Employee(string inName, int inID, decimal inHourlyWage)
{
Name = inName;//set name, no validation is required
//validate ID is between 1 and 250. if not, set to nextID available
if (inID <= 1 && inID >= 250)
NextID = inID;
//validate hourly wage is between 12.50 and 20. If not, set to 15.25
if (inHourlyWage <= 12.50m && inHourlyWage >= 20.0m)
inHourlyWage = 15.25m;
TotalPay = 0;//set total pay to 0
}
public string DisplayData() => ID + "\t" + Name + "\t" + HourlyWage.ToString("c") + "\t" + TotalPay.ToString("c");
}
class员工列表
{
//使用私有访问修饰符创建员工列表
私有列表员工=新列表();
公开名单雇员
{
获取{返回员工;}
设置{employees=value;}
}
//返回员工列表的计数,使用lambda运算符
public int Count=>employees.Count();
//创建默认构造函数
公共雇员列表(){}
//创建将发送的员工添加到列表的方法。无返回值
公共无效增编(员工emp)
{
employees.Add(emp);//将员工添加到列表中
}
//根据发送的数据创建员工。无返回值
public void addamp(名称中的字符串、inID中的整数、inHourlyWage中的小数)
{
//声明一个变量
员工emp=新员工(inName、inID、inHourlyWage);
//调用另一个加法器
加法器(emp);
}
//创建从列表中删除员工的方法。无返回值
public void DeleteEmp(emp)=>employees.Remove(emp);
//在索引处插入雇员
public void InsertEmp(Employee emp,int index)=>employees.Insert(index,emp);
//创建索引器
公共雇员本[int i]
{//q12-索引器属性,有异常
得到
{
如果(i<0 | | i>=计数)
抛出新ArgumentOutOfRangeException(i.ToString());
返回员工[i];
}
设置{employees[i]=value;}
}
}
员工类别代码
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//create class-level employee list
EmployeeList plumbers = new EmployeeList();
private void Form1_Load(object sender, EventArgs e)
{
//run a for loop to create 4 plumbers from the default constructor.
for (int i = 0; i < plumbers.Count; i++)
plumbers[i] = new Employee();
//After they are created (within the FOR loop), change their names,
//plumbers[0].Name = "Nicole Fernandez";
//add them to the employee list
//display in listbox
foreach (Employee item in plumbers.Employees)
{
lstDisplay.Items.Add(item.DisplayData());
}
}
class EmployeeList
{
//use private access modifier to create a list of employee
private List<Employee> employees = new List<Employee>();
public List<Employee> Employees
{
get { return employees; }
set { employees = value; }
}
//return the count of the employee list, use lambda operator
public int Count => employees.Count();
//create default constructor
public EmployeeList() { }
//create a method that adds employee sent to the list. No return value
public void AddEmp(Employee emp)
{
employees.Add(emp);//add employee to the list
}
//create employee from data sent. No return value
public void AddEmp(string inName, int inID, decimal inHourlyWage)
{
//declare a variable
Employee emp = new Employee(inName, inID, inHourlyWage);
//call the other AddEmp
AddEmp(emp);
}
//create a method that deletes employee from the list. No return value
public void DeleteEmp(Employee emp) => employees.Remove(emp);
//insert employee at the index
public void InsertEmp(Employee emp, int index) => employees.Insert(index, emp);
//create an indexer
public Employee this[int i]
{ //q12 - indexer property with exception
get
{
if (i < 0 || i >= Count)
throw new ArgumentOutOfRangeException(i.ToString());
return employees[i];
}
set { employees[i] = value; }
}
}
class Employee
{
//use auto-implemented property
public int ID { get; set; }
public string Name { get; set; }
public decimal HourlyWage { get; set; }
public decimal TotalPay { get; set; }
//create static integer that starts at 1
private static int NextID = 1;
//create a default constructor with default values
public Employee()
{
ID = NextID++;
Name = "John Doe";
HourlyWage = 15.25m;
TotalPay = 0.0m;
}
//create the custom constructor sending in 3 parameters
public Employee(string inName, int inID, decimal inHourlyWage)
{
Name = inName;//set name, no validation is required
//validate ID is between 1 and 250. if not, set to nextID available
if (inID <= 1 && inID >= 250)
NextID = inID;
//validate hourly wage is between 12.50 and 20. If not, set to 15.25
if (inHourlyWage <= 12.50m && inHourlyWage >= 20.0m)
inHourlyWage = 15.25m;
TotalPay = 0;//set total pay to 0
}
public string DisplayData() => ID + "\t" + Name + "\t" + HourlyWage.ToString("c") + "\t" + TotalPay.ToString("c");
}
class员工
{
//使用自动实现的属性
公共int ID{get;set;}
公共字符串名称{get;set;}
公共十进制小时数{get;set;}
公共十进制TotalPay{get;set;}
//创建从1开始的静态整数
私有静态int NextID=1;
//使用默认值创建默认构造函数
公职人员()
{
ID=NextID++;
Name=“约翰·多伊”;
小时里程=15.25m;
总工资=0.0m;
}
//创建自定义构造函数并发送3个参数
public Employee(名称中的字符串、整数、小数)
{
Name=inName;//设置名称,不需要验证
//验证ID介于1和250之间。如果不是,则设置为nextID available
如果(inID=250)
NextID=inID;
//验证小时工资是否介于12.50和20之间。如果不是,则设置为15.25
如果(室内尺寸=20.0m)
室内尺寸=15.25m;
TotalPay=0;//将TotalPay设置为0
}
公共字符串DisplayData()=>ID+“\t”+Name+“\t”+HourlyWage.ToString(“c”)+“\t”+TotalPay.ToString(“c”);
}
首先,如果要使用循环创建一个包含4名管道工的列表,则需要循环迭代4次。这通常是通过将初始计数器值设置为0,然后在小于所需数量时循环来完成的:
for (int i = 0; i < 4; i++)
由于似乎没有任何公共方法来更新现有的水管工,我们可以直接访问员工
列表来重命名水管工。有两种方法可以做到这一点。一种是使用循环,并在名称中使用循环计数器的一部分:
// After they are created (within the FOR loop), change their names
for(int i = 0; i < plumbers.Employees.Count; i++)
{
plumbers.Employees[i].Name = string.Format("Plumber #{0}", i);
}
或者,如果你真的想成为一个花花公子,你可以生成一个名字列表(我从中提取了这些名字),然后为每个水管工从列表中随机抽取一个名字并分配它(然后从列表中删除它,这样水管工都有唯一的名字):
//在创建它们之后(在FOR循环中),更改它们的名称
//生成一个名称列表
var namepardidates=新列表
{
“奥利维亚”、“阿米莉亚”、“夏洛特”、“艾娃”、“艾拉”、“阿拉贝拉”、“极光”,
“阿德琳”,“佩内洛普”,“埃莉诺”,“以斯拉”,“亚舍”,“阿提库斯”,
“德克兰”、“奥利弗”、“塞拉斯”、“米洛”、“利维”、“亨利”、“怀亚特”
};
//循环遍历每个水管工,并随机选择一个名称
var rnd=新随机数();
foreach(管道工中的var管道工。员工)
{
//选择一个随机名称,分配该名称,然后将其从候选名称中删除
var nameIndex=rnd.Next(nameCandidates.Count);
plumber.Name=姓名候选人[姓名索引];
namePendidates.RemoveAt(nameIndex);
}
for到达第一个时,列表是空的。计数为零,因此for
将不会执行。下一个语句尝试访问一个不存在的元素,因为列表也是空的。@MarkLarter那么我如何执行它,正如问题所说,我必须运行一个for循环,创建4个水管工,并在t之后更改他们的名称hat..参见答案。您只需要使要添加项的循环运行固定次数,而不是使用限制作为开始时为零的计数