需要C#中的Scratch Card Code Generator解决方案吗?

时间:2013-04-12 16:50:08

标签: c# .net visual-studio-2010 visual-studio data-structures

我正在c#Vs 2010中制作一个SCRATCH卡代码生成器程序。 其中也生成可能的组合数和唯一编号 表示不重复的数字

例如:

5! = 120组合或可能的数字

2! = 2个组合或可能的数字

我们可以同时给出整数值和字符串值,并生成可能的组合 该程序已成功运行..

您可以在MAIN METHOD字符串c =“abc”;

中设置新值

例如:(您可以在此处更改值) string c =“abc”; string c =“1232abc”;

整个代码在控制台c#中: -

static void Main(string[] args)
{
    Permute p = new Permute();
    // here u can change value in string 
    string c = "abc";
    char[] c2 = c.ToCharArray();
    p.setper(c2);
    Console.ReadKey();
}

class Permute
{
    int count = 0 ;
    private void swap (ref char a, ref char b)
    {
        char x;
        if(a==b)return;
        x = a;
        a = b;
        b = x;
    }

    public void setper(char[] list)
    {
        int x=list.Length-1;
        go(list,0,x);
    }

    private void go (char[] list, int k, int m)
    {
        int i;
        if (k == m)
        {
            Console.Write (list );
            count++;
            Console.WriteLine ("  "+ count  );
        }
        else
        for (i = k; i <= m; i++)
        {
            swap (ref list[k],ref list[i]);
            go (list, k+1, m);
            swap (ref list[k],ref list[i]);
        }
    }

问题是我们无法转换为WINDOWS FORM C# 当我们转换它时,它不会生成在CONSOLE程序中执行的唯一数字 我们已经尝试在WINDOWS FORM中执行它是什么问题,我们无法检测到它

Windows代码形式c#(我们已经尝试过):

// this is our Button 1 we have changed name to BtGenerate
// we have used LISTBOX to show the generated values 
// or u can say to show numbers in Listbox
private void BtGenerate_Click(object sender, EventArgs e)
{
    string abc = textBox1.Text;
    char[] c = abc.ToCharArray();
    Permutation p = new Permutation();
    string value = p.setper(c);

    // here is our listbox
    listBox1.Items.Add(value); 
}

// we have used the PERMUTATION Class here
// which is generating numbers
// this class is changed compared to console Permutation class
class Permutation
{
    public string Value;

    private void swap(ref char a, ref char b)
    {
        if (a == b) return;
        a ^= b;
        b ^= a;
        a ^= b;
    }

    public string setper(char[] list)
    {            
        int x = list.Length - 1;
        string ValueInString =  go(list, 0, x);
        return ValueInString;                      
    }

    int x = 0;
    private string go(char[] list, int k, int m)
    {
        int i;

        if (k == m)
        {               
            if(x == 0)
            {
                x++;
                for (int j = 0; j < list.Length; j++)
                {                   
                    Value = Value + list[j].ToString();
                }
                //this code is used which gives gap like arrow to seperate number
                //because we are not able to generate each number to new line

                Value = Value + @"<--" + x + " ";
            }
            if (x > 0)
            {
                x++;

                for (int j = 0; j < list.Length; j++)
                {
                    Value = Value + list[j].ToString();
                }

                Value = Value + @"<--"+ x + " ";
            }            
        }
        else
            for (i = k; i <= m; i++)
            {
                swap(ref list[k], ref list[i]);
                go(list, k + 1, m);
                swap(ref list[k], ref list[i]);
            }
        return Value;
    } 

为什么它不会生成唯一的数字,因为它发生在CONSOLE PROGRAM中? 问题是什么????

1 个答案:

答案 0 :(得分:1)

这里有很多问题,这些问题都不是你所遇到的明显问题,但所有问题都让人难以理解。这看起来很多更像C ++代码而不是C#代码。

编写良好的代码:

  1. 您不应该经过ref
  2. 您不应该从类的函数输出,特别是这样您可以在不同类型的事物之间重用它。
  3. 您应该使用foreach代替for循环。
  4. 变量和函数应该有描述性的名称,以表明它们是什么,除非从上下文中显而易见。
  5. char[]在大多数情况下应为string (此案可能是合法用途)
  6. 对于实际排列逻辑,请参阅this question的答案 - 唯一的变化是您在char而不是string上进行此操作。或者,请参阅从那里链接的here