【发布时间】:2014-01-04 02:47:52
【问题描述】:
我编写了一个简单的 C# 控制台应用程序,它获取所有素数,并将它们堆叠到一个字符串变量中。
我的问题是为什么第一个“如果”接受所有数字?我认为我写的规则很好。我的代码(当然所有变量都在脚本头部格式化):
check++;
number++;
num = number;
if (number / num == 1 && number / 1 == num)
{
Console.WriteLine("Working...");
Console.WriteLine("Numbers Checked: " + check);
produce++;
Console.WriteLine("Numbers Prodused: " + produce);
Console.WriteLine("Numbers Failed : " + fail);
System.Threading.Thread.Sleep(1);
Console.Clear();
//storing the numbers
str += Convert.ToString(number);
}
else
{
fail++;
}
Console.WriteLine(str);
问题是,当我运行程序时,失败指示器保持为 0,这意味着循环正在处理所有数字,素数没有例外。
我该如何解决这个问题?我的“如果(规则)”错了吗?
编辑! :
我开始新鲜;) 这就是我所做的:
bool isPrime = false;
int number = 0, counter = 0;
while (number <= counter)
{
counter++;
number++;
isPrime = true;
for (int i = 2; i < number; ++i)
{
if (number % i == 0)
{
isPrime = false;
break;
}
}
if (isPrime)
{
System.Threading.Thread.Sleep(1);
Console.WriteLine(number);
Console.Beep();
}
Console.WriteLine("Try Number " + counter);
效果很好,我很快会继续将它开发成 Windows 窗体应用程序;)
【问题讨论】:
-
您是否尝试过使用调试器查看发生了什么?
-
你应该循环到
i<number/2,因为你已经检查过它是否可以被2整除。见类似帖子stackoverflow.com/q/15743192/380384
标签: c#