C# 为什么循环在我的Windows窗体应用程序中不起作用?
我试图在Windows窗体应用程序中结合素数、偶数和奇数及其结果。我已经在控制台中测试了代码,但在Windows窗体中,它不会循环到下一个适用的数字。例如:在控制台1-10中,素数将导致“2,3,5,7”,但在Windows窗体应用程序中,它将导致“2”C# 为什么循环在我的Windows窗体应用程序中不起作用?,c#,winforms,loops,for-loop,C#,Winforms,Loops,For Loop,我试图在Windows窗体应用程序中结合素数、偶数和奇数及其结果。我已经在控制台中测试了代码,但在Windows窗体中,它不会循环到下一个适用的数字。例如:在控制台1-10中,素数将导致“2,3,5,7”,但在Windows窗体应用程序中,它将导致“2” 公共部分类编号LC:表单 { 公众号码信用证() { 初始化组件(); } 私有void Primes\u CheckedChanged(对象发送方,事件参数e) { { int f=转换为32(最小文本); int i=转换为32(最大文本)
公共部分类编号LC:表单
{
公众号码信用证()
{
初始化组件();
}
私有void Primes\u CheckedChanged(对象发送方,事件参数e)
{
{
int f=转换为32(最小文本);
int i=转换为32(最大文本);
bool isPrime=true;
对于(f=0;f将代码更改为:
private void Primes_CheckedChanged(object sender, EventArgs e)
{
{
string final = "The Prime Numbers Are:";// you need to keep the result out of the loop instead of reset it everytime
int f = Convert.ToInt32(Min.Text);
int i = Convert.ToInt32(Max.Text);
bool isPrime = true;
for (f = 0; f <= i; f++)// why set f=0 here ? Does not f = min already ?
{
for (int j = 2; j <= i; j++)// maybe j < f not j <= i
{
if (f != j && f % j == 0)// then remove f != j here
{
isPrime = false;
break;
}
}
if (isPrime)
final = final + " " + f;// then add your found number to the result here
isPrime = true;
}
Result.Text = final;
}
}
private void Primes\u CheckedChanged(对象发送方,事件参数e)
{
{
string final=“素数是:;//您需要将结果保留在循环之外,而不是每次都重置它
int f=转换为32(最小文本);
int i=转换为32(最大文本);
bool isPrime=true;
对于(f=0;f我认为LINQ更适合这里,您可以尝试以下方法:
int[] numbers = Enumerable.Range(f, i-f).ToArray<int>();
string oddNumbers=string.Join(",", from number in numbers
where (number % 2)!=0
select number);
string evenNumbers = string.Join(",", from number in numbers
where (number % 2) == 0
select number);
Result.Text = "The Even Numbers Are:" + evenNumbers;
Result.Text = "The Odd Numbers Are:" + oddNumbers;
其中IsPrime()
方法定义如下
private static bool IsPrime(int number)
{
for (int i = 2; i < number; i ++)
if (number % i == 0) return false;
return true;
}
private static bool IsPrime(整数)
{
for(int i=2;i
我将将您的循环/检查组合成一种方法,如下所示:
private void Form1_Load(object sender, EventArgs e)
{
this.Primes.CheckedChanged += Options_CheckedChanged;
this.Evens.CheckedChanged += Options_CheckedChanged;
this.Odds.CheckedChanged += Options_CheckedChanged;
this.Min.TextChanged += Range_Changed;
this.Max.TextChanged += Range_Changed;
CheckNumbers();
}
private void Range_Changed(object sender, EventArgs e)
{
CheckNumbers();
}
private void Options_CheckedChanged(object sender, EventArgs e)
{
CheckNumbers();
}
private void CheckNumbers()
{
int min, max;
try
{
min = Convert.ToInt32(Min.Text);
max = Convert.ToInt32(Max.Text);
}
catch (Exception)
{
Results.Text = "Invalid Range!";
return;
}
List<int> lstPrimes = new List<int>();
List<int> lstEvens = new List<int>();
List<int> lstOdds = new List<int>();
if (Primes.Checked || Evens.Checked || Odds.Checked)
{
bool isPrime;
for (int f = min; f <= max; f++)
{
if (Primes.Checked)
{
isPrime = true;
for (int j = 2; j <= max; j++)
{
if (f != j && f % j == 0)
{
isPrime = false;
break;
}
}
if (isPrime)
{
lstPrimes.Add(f);
}
}
int modResult = f % 2;
if (Evens.Checked && modResult == 0)
{
lstEvens.Add(f);
}
if (Odds.Checked && modResult != 0)
{
lstOdds.Add(f);
}
}
}
StringBuilder sb = new StringBuilder();
if (Primes.Checked)
{
sb.AppendLine("The Prime Numbers Are:" + String.Join(",", lstPrimes));
}
if (Evens.Checked)
{
sb.AppendLine("The Even Numbers Are:" + String.Join(",", lstEvens));
}
if (Odds.Checked)
{
sb.AppendLine("The Odd Numbers Are:" + String.Join(",", lstOdds));
}
Results.Text = sb.ToString();
}
private void Form1\u加载(对象发送方,事件参数e)
{
this.Primes.CheckedChanged+=选项\u CheckedChanged;
this.Evens.CheckedChanged+=选项\u CheckedChanged;
this.locks.CheckedChanged+=选项\u CheckedChanged;
this.Min.TextChanged+=范围_已更改;
this.Max.TextChanged+=范围_已更改;
支票号码();
}
私有无效范围\u已更改(对象发送方、事件参数e)
{
支票号码();
}
私有无效选项\u CheckedChanged(对象发送方,事件参数e)
{
支票号码();
}
私有无效支票号码()
{
最小整数,最大整数;
尝试
{
min=转换为32(min.Text);
max=转换为32(max.Text);
}
捕获(例外)
{
Results.Text=“无效范围!”;
返回;
}
List lstPrimes=新列表();
List lstEvens=新列表();
List lstLobbits=新列表();
如果(素数已检查| |偶数已检查| |赔率已检查)
{
bool-isPrime;
对于(int f=min;f在调试器中逐步检查您的代码,并发现哦,哇……对不起。我可以看到睡眠不足的情况出现了。Result.Text=final;
应该是两个循环中的一个:)是的,谢谢@waqarhmed:)我只是复制和编辑,没有检查所有OP的代码。很好!但是素数呢?把它加在+1上做得好,先生!+1
private static bool IsPrime(int number)
{
for (int i = 2; i < number; i ++)
if (number % i == 0) return false;
return true;
}
private void Form1_Load(object sender, EventArgs e)
{
this.Primes.CheckedChanged += Options_CheckedChanged;
this.Evens.CheckedChanged += Options_CheckedChanged;
this.Odds.CheckedChanged += Options_CheckedChanged;
this.Min.TextChanged += Range_Changed;
this.Max.TextChanged += Range_Changed;
CheckNumbers();
}
private void Range_Changed(object sender, EventArgs e)
{
CheckNumbers();
}
private void Options_CheckedChanged(object sender, EventArgs e)
{
CheckNumbers();
}
private void CheckNumbers()
{
int min, max;
try
{
min = Convert.ToInt32(Min.Text);
max = Convert.ToInt32(Max.Text);
}
catch (Exception)
{
Results.Text = "Invalid Range!";
return;
}
List<int> lstPrimes = new List<int>();
List<int> lstEvens = new List<int>();
List<int> lstOdds = new List<int>();
if (Primes.Checked || Evens.Checked || Odds.Checked)
{
bool isPrime;
for (int f = min; f <= max; f++)
{
if (Primes.Checked)
{
isPrime = true;
for (int j = 2; j <= max; j++)
{
if (f != j && f % j == 0)
{
isPrime = false;
break;
}
}
if (isPrime)
{
lstPrimes.Add(f);
}
}
int modResult = f % 2;
if (Evens.Checked && modResult == 0)
{
lstEvens.Add(f);
}
if (Odds.Checked && modResult != 0)
{
lstOdds.Add(f);
}
}
}
StringBuilder sb = new StringBuilder();
if (Primes.Checked)
{
sb.AppendLine("The Prime Numbers Are:" + String.Join(",", lstPrimes));
}
if (Evens.Checked)
{
sb.AppendLine("The Even Numbers Are:" + String.Join(",", lstEvens));
}
if (Odds.Checked)
{
sb.AppendLine("The Odd Numbers Are:" + String.Join(",", lstOdds));
}
Results.Text = sb.ToString();
}