我正在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中? 问题是什么????
答案 0 :(得分:1)
这里有很多问题,这些问题都不是你所遇到的明显问题,但所有问题都让人难以理解。这看起来很多更像C ++代码而不是C#代码。
编写良好的代码:
ref
。foreach
代替for
循环。 char[]
在大多数情况下应为string
(此案可能是合法用途) 对于实际排列逻辑,请参阅this question的答案 - 唯一的变化是您在char
而不是string
上进行此操作。或者,请参阅从那里链接的here。