C# 为什么循环在我的Windows窗体应用程序中不起作用?

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(最大文本)

我试图在Windows窗体应用程序中结合素数、偶数和奇数及其结果。我已经在控制台中测试了代码,但在Windows窗体中,它不会循环到下一个适用的数字。例如:在控制台1-10中,素数将导致“2,3,5,7”,但在Windows窗体应用程序中,它将导致“2”

公共部分类编号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();
    }