【问题标题】:shifting value in a matrix在矩阵中移动值
【发布时间】:2012-03-30 14:49:02
【问题描述】:

我有一个 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
}

这将持续到最后。完成所有列后,它将重新开始。

我实际上有一个椭圆形的矩阵(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;
        }
    }

【问题讨论】:

  • “矩阵中的Shift 1, 0”是什么意思?我不太明白。你想用这个做什么?
  • 这是一个 4x8 矩阵(行先行)。
  • 另外,你试过什么?您也应该发布一些代码。
  • int k = 0; for (int i = 0; i
  • 请编辑您的问题,将格式化后的代码放在最后,这样阅读起来会更清晰。

标签: c# algorithm matrix


【解决方案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 格式。您可以更改代码以适应您的新情况。

【讨论】:

  • 我也删除了k = k+1-1;,因为它什么也没做。另外,你不应该有不同于 0 和 1 的值,对吧?在我的代码中,任何非零值都被视为绿色。
  • 非常感谢。我完成了换色。但是将这些数据从左向右移动的另一部分尚未完成。假设我的输入是“11011011”。这将改变前两列的颜色。但我的矩阵有更多的 6 列。我想将此数据移动到下一列。就像一个移动的LED显示屏。我对你清楚吗?并为糟糕的沟通技巧道歉。
  • 你可以用上面的代码做到这一点。您只需要加载完整的矩阵。每次调用 ChangeArrayDisplay(),但使用不同的 firstColumn 时,显示会发生变化,但您不必更改矩阵。
  • 要制作 LED 显示屏,您可以有一个计时器(我猜您正在使用 Windows 窗体?),它调用 ChangeArrayDisplay(),每 X 增加(或减少)firstColumn 索引秒。
  • for (FirstColumn = 1; FirstColumn
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-06
  • 1970-01-01
  • 1970-01-01
  • 2014-08-24
相关资源
最近更新 更多