【发布时间】:2021-04-26 11:44:54
【问题描述】:
我需要一些关于在应用程序中存储对象/数据的方式的帮助。我正在创建一个应用程序:创建机器人,为机器人分配任务,显示机器人信息和任务时间等。
我已经设置了多个不同的对象,以便在程序运行时在 Main 中实例化。然后用户将从类型列表中选择机器人类型。我无法将 botType 对象传递给 Robot 对象。我要求用户使用 int 选择 botType 1-6,然后我希望用户选择 int 来定义应该将哪个 botType 应用于机器人。 因为我在 Main 中初始化 BotTypes,然后使用不同的方法来 CreateRobot()。我无法将 botType 传递给 Robot 对象。我可以传递用户选择的整数,但这不会像我试图完成的那样将 botType 传递给 Robot。
这是我正在使用的类/构造函数:
public class Robot
{
//Store robot name
public string botName { get; set; }
//Store robot type
public BotType botType { get; set; }
//Store time to complete task
public int timeElapsed { get; set; }
public Robot(string BotName, BotType botType, int TimeElapsed)
{
this.botName = BotName;
this.botType = new BotType();
timeElapsed = TimeElapsed;
}
public class BotType
{
//Type of robot
public string TypeName { get; set; }
//Type of task represented by number
public int TaskType { get; set; }
//contructor to set values
public BotType (string typeName, int taskType)
{
TypeName = typeName;
TaskType = taskType;
}
然后是初始化对象的主要方法,但是当我尝试使用它们时,我无法像我想要的那样将用户定义的 int 转换为 BotType..
public class BotOMat
{
public static List<Robot> botList = new List<Robot>();
public static List<BotTask> botTaskMap = new List<BotTask>();
public static List<BotType> botTypeMap = new List<BotType>();
static void Main(string[] args)
{
//initalize bot types
BotType UNIPEDAL = new BotType("Unipedal", 1);
BotType BIPEDAL = new BotType("Bipedal", 2);
BotType QUADRUPEDAL = new BotType("Quadrupedal", 3);
BotType ARACHNID = new BotType("Arachnid", 4);
BotType RADIAL = new BotType("Radial", 5);
BotType AERONAUTICAL = new BotType("Aeronautical", 6);
//initialize bot tasks
BotTask DISHES = new BotTask("Do the dishes", 1000, 0);
BotTask SWEEP = new BotTask("Sweep the house", 3000, 0);
BotTask LAUNDRY = new BotTask("Do the laundry", 10000, 0);
BotTask RECYCLING = new BotTask("Take out the recycling", 4000, 0);
BotTask SAMMICH = new BotTask("Make a sammich", 7000, 0);
BotTask LAWN = new BotTask("Mow the lawn", 20000, 0);
BotTask RAKE = new BotTask("Rake the leaves", 18000, 0);
BotTask BATH = new BotTask("Give the dog a bath", 14500, 0);
BotTask BAKE = new BotTask("Bake some cookies", 8000, 0);
BotTask WASH = new BotTask("Wash the car", 20000, 0);
var botTaskMap = new List<BotTask> { DISHES, SWEEP, LAUNDRY, RECYCLING, SAMMICH, LAWN, RAKE, BATH, BAKE, WASH };
var botTypeMap = new List<BotType> { UNIPEDAL, BIPEDAL, QUADRUPEDAL, ARACHNID, RADIAL, AERONAUTICAL };
private static void createRobot()
{
//Get robot name, add to list saving multiple names.
Console.WriteLine("Enter robot name:");
string botName = Console.ReadLine();
//Get robot type
Console.WriteLine("Enter robot type: (number)");
int botType = Convert.ToInt32(Console.ReadLine());
//botType = botTypeMap[botType];
//boxing to convert int to BotType
//error handling
if (botType < 1 || botType > 6)
{
Console.WriteLine("Invalid input. Please enter number 1-6.");
//BotType.TaskType = 0;
}
//Add robot to the class storing robot information.
if (botType > 1 || botType < 6)
{
Robot aRobot = new Robot(botName, botType, 0);
botList.Add(aRobot);
aRobot.AssignBotTask();
aRobot.CompleteTask();
}
else
{
MainMenu();
}
}
我可以将 BotType 作为整数传递给 Robot,也可以接收参数 2:无法从 int 转换为 BotOMat.BotType。每当我尝试使用 aRobot 写入任何输出时,控制台都会使用不是所需输出的受保护变量进行写入。
我应该在机器人类中创建一个机器人吗?然后我需要稍后将 BotTask(s) 分配给机器人......我相信这些使用关联类型关系,但如果对象没有在每个类中初始化。我不确定如何启动;例如:做菜的 Unipedal 机器人。
感谢您提前提供的任何帮助。我尽量做到描述性强,但不发布重复问题,因为我能找到的任何其他示例都比我认为我想要完成的要基本得多在这里。
【问题讨论】:
-
List索引是从零开始的,所以试试botTypeMap[ botType - 1]
标签: c# oop associations aggregation