在for循环内声明动态变量(C#)

时间:2016-12-11 13:47:29

标签: c#

当我在控制台中键入示例2时,我有一个任务,然后我应该解析接下来的两行字符串。我给你一个明确的例子:

2
J 1 1 1 1
B 0 0 0 1

所以当我像这样做一个for循环时,当我在控制台上写时,它只显示第二个蛇怪(B 0 0 0 1):

string basilisk;
        int basilisk1D = 0;
        int basilisk2D = 0;
        int basilisk3D = 0;
        int basilisk4D = 0;
        string basiliskName = string.Empty;
        for (int i = 0; i < numberOfBasilisks; i++)
        {
            basilisk = Console.ReadLine();
            var splittedBasilisk = basilisk.Split(' ');
            basiliskName = splittedBasilisk[0];
            basilisk1D = int.Parse(splittedBasilisk[1]);
            basilisk2D = int.Parse(splittedBasilisk[2]);
            basilisk3D = int.Parse(splittedBasilisk[3]);
            basilisk4D = int.Parse(splittedBasilisk[4]);               
        }

它删除了我的第一行并且只放了第二个蛇怪的数据所以我可以在变量的名称中放入for循环i以使它们对于每个蛇怪都是唯一的或者有一个更好的溶液

1 个答案:

答案 0 :(得分:1)

您不能将八个整数和两个字符串放入四个int变量和一个string变量中。您需要将结果存储在某种集合中。

首先,创建一个存储行数据的类:

class Basilisk {
    public string Name {get;set;}
    public string Num1 {get;set;}
    public string Num2 {get;set;}
    public string Num3 {get;set;}
    public string Num4 {get;set;}
}

由于您立即知道所需的行数,因此可以使用数组:

var basilisks = new Basilisk[numberOfBasilisks];
for (int i = 0; i < numberOfBasilisks; i++) {
    basilisks[i] = new Basilisk();
    var str = Console.ReadLine();
    var splittedBasilisk = str.Split(' ');
    basilisks[i].Name = splittedBasilisk[0];
    basilisks[i].Num1 = int.Parse(splittedBasilisk[1]);
    basilisks[i].Num2 = int.Parse(splittedBasilisk[2]);
    basilisks[i].Num3 = int.Parse(splittedBasilisk[3]);
    basilisks[i].Num4 = int.Parse(splittedBasilisk[4]);               
}

您还可以使用馆藏,具体取决于您是否已在课程作业中使用列表。