在矩阵中移动值

时间:2012-03-30 14:49:02

标签: c# algorithm matrix

我有一个4x8矩阵。

{
0,0,0,0,0,0,0,0

0,0,0,0,0,0,0,0

0,0,0,0,0,0,0,0

0,0,0,0,0,0,0,0
}

如果我输入“10111101”,那么该过程应该是:

{
1,0,0,0,0,0,0,0

1,0,0,0,0,0,0,0

0,0,0,0,0,0,0,0

1,0,0,0,0,0,0,0
}

then

{
1,1,0,0,0,0,0,0

0,1,0,0,0,0,0,0

1,0,0,0,0,0,0,0

1,1,0,0,0,0,0,0
}

then

{
0,1,1,0,0,0,0,0

0,0,1,0,0,0,0,0

0,1,0,0,0,0,0,0

0,1,1,0,0,0,0,0
}

then

{
0,0,1,1,0,0,0,0

0,0,0,1,0,0,0,0

0,0,1,0,0,0,0,0

0,0,1,1,0,0,0,0
}

{

0,0,0,1,1,0,0,0


0,0,0,0,1,0,0,0

0,0,0,1,0,0,0,0

0,0,0,1,1,0,0,0
}

这将是最后一次。完成所有列后,它将重新开始。

我实际上有一个ovals形状的矩阵(4x8)。我使用了List<>并且所有控件都在shapecontainer中。我想在找到1时改变颜色。这部分我可以做,但我想不出如何在矩阵中移动1,0。

我怎么能这样做?

这是我的代码:

int k = 0;

    for (int i = 0; i < stringLength; i++)
    {                
        if(toto[i].ToString()=="1")
        {
            ovalShape[k].FillColor = Color.Red;
            k = k + 1;
        }
        else if (toto[i].ToString() == "0")
        {
            ovalShape[k].FillColor = Color.LawnGreen;
            k = k + 1;
        }
        else
        {
            k = k+1-1;
        }
    }

1 个答案:

答案 0 :(得分:1)

为什么不使用变量来确定首先显示哪个列? (我在这里使用firstColumn) (未测试)

void ChangeArrayDisplay(int firstColumn) //Any column can be first, from 0 to 7
{
    int k = 0;
    for (int i = firstColumn * 4; i < stringLength; i++) 
    {
        changeOvalColor(k, toto[i]);
        k++;
    }
    for (int i = 0; i < firstColumn * 4; i++) 
    {
        changeOvalColor(k, toto[i]);
        k++;
    }
}

void ChangeOvalColor(int index, int colorValue)
{
     if(colorValue == 0)
         ovalShape[index].FillColor = Color.Red;
     else
         ovalShape[index].FillColor = Color.LawnGreen;
}

我还对您的代码进行了一些更改。 您应该知道k = k + 1;等同于k++;

修改 问题已经改变,但我仍然在这里使用你的8x4格式。您可以更改代码以适应您的新情况。