我是C#的新手。我想编写类似的东西,如果用户将在文本框中输入任何整数,则在列表框中显示素数。 (也就是说,如果他们写10,它将显示0-10的素数,或0-20的20,等等。)
在编程之前,我应该先考虑什么? 我知道互联网上有很多例子,但首先我想知道我需要什么?
感谢您提示; - )
=== 多谢你们。所以你建议最好先在Console应用程序中做到这一点? 我使用控制台应用程序做了一个非常简单的“For Loop”示例,但是当我尝试在Windows窗体应用程序中执行它时,我不确定如何实现它。 我担心如果我继续在控制台中做示例,那么我将很难在Windows Form Apps中执行此操作。 你觉得怎么样?
====== 你好,再次,
我的代码需要一些反馈:
Console.WriteLine("Please enter your integer: ");
long yourInteger;
yourInteger = Int32.Parse(Console.ReadLine());
//displaying the first prime number and comparing it to the given integer
for (long i = 2; i <= yourInteger; i = i + 1)
{
//Controls i if its prime number or not
if ((i % 2 != 0) || (i == 2))
{
Console.Write("{0} ", i);
}
}
答案 0 :(得分:11)
好吧,首先我会考虑如何找到素数,然后在控制台应用程序中写入读取行,进行数学运算并写入结果(纯粹因为这是你能做的最简单的事情) ,并涵盖了稍后您需要的相同解析等逻辑。
当您对素数生成感到满意时,请查看如何进行winforms - 如何在表单上放置列表框,文本框和按钮;如何处理(按钮的)click事件,以及如何从文本框中读取并将值写入列表框。你的主要代码应该可以“按原样”......
如果您还没有IDE,请注意C# Express是免费的,并且将涵盖以上所有内容。
答案 1 :(得分:6)
你需要知道:
我强烈建议您将这些任务分开。一旦你让他们每个人分开工作,你就可以把它们放在一起。 (Marc建议为素数部分编写一个控制台应用程序 - 如果您不想进行单元测试,这是一个很好的建议。如果您使用其他语言的单元测试,那么它很容易启动和运行NUnit。控制台应用程序肯定会更快开始使用。)
理论上,对于可能长时间运行的任务(例如,用户输入1000000作为第一个数字),您通常应该使用后台线程来保持UI响应。但是,我会先忽略它。请注意,当您计算素数时,您的应用程序将显示为“挂起”,但首先让它工作。一旦您对简单版本充满信心,如果您有冒险精神,可以查看BackgroundWorker
之类的内容。
答案 2 :(得分:4)
我讨论了在我的博客上使用Sieve of Eratosthenes创建素数:
http://blogs.msdn.com/mpeck/archive/2009/03/03/Solving-Problems-in-CSharp-and-FSharp-Part-1.aspx
代码看起来像这样......
public IEnumerable<long> GetPrimes(int max)
{
var nonprimes = new bool[max + 1];
for (long i = 2; i <= max; i++)
{
if (nonprimes[i] == false)
{
for (var j = i * i; j <= max; j += i)
{
nonprimes[j] = true;
}
yield return i;
}
}
}
使用此代码,您可以编写这样的语句......
var primes = SieveOfEratosthenes.GetPrimes(2000);
...获得一个高达2000的IEnumerable素数。
可以在http://FSharpCSharp.codeplex.com的CodePlex上找到所有代码。
代码“按原样”,因此您应该查看它以确定它是否符合您的需求,是否需要添加错误检查等,因此将其视为样本。
答案 3 :(得分:3)
这是一个很棒的“天真”素数算法,非常适合您的需求: http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes
答案 4 :(得分:1)
以下是对编辑的回复:
谢谢你们。所以你建议最好先在Console应用程序中做到这一点?我使用控制台应用程序做了一个非常简单的“For Loop”示例,但是当我尝试在Windows窗体应用程序中执行它时,我不确定如何实现它。我担心如果我继续在控制台中做示例,那么我将很难在Windows Form Apps中执行此操作。你觉得怎么样?
如果要将素数作为Windows窗体应用程序呈现,则还需要为其设计用户界面。对于要解决的这么小的问题来说,这有点过分。您可以做的最简单的设计是在表单中填写ListBox
(example)。
如果您真的热衷于学习Windows窗体或WPF,那么several resources就可以了。
答案 5 :(得分:1)
我最近编写了一个实现Sieve Of Eratosthenes的例程并遇到了这个帖子。仅针对档案,这是我的实施:
static List<int> GetPrimeNumbers(int maxNumber)
{
// seed the master list with 2
var list = new List<int>() {2};
// start at 3 and build the complete list
var next = 3;
while (next <= maxNumber)
{
// since even numbers > 2 are never prime, ignore evens
if (next % 2 != 0)
list.Add(next);
next++;
}
// create copy of list to avoid reindexing
var primes = new List<int>(list);
// index starts at 1 since the 2's were never removed
for (int i = 1; i < list.Count; i++)
{
var multiplier = list[i];
// FindAll Lambda removes duplicate processing
list.FindAll(a => primes.Contains(a) && a > multiplier)
.ForEach(a => primes.Remove(a * multiplier));
}
return primes;
}
如果你的素数列表中需要1,你总是可以用“1,2”播种。
答案 6 :(得分:1)
using System;
class demo
{
static void Main()
{
int number;
Console.WriteLine("Enter Number you Should be Checked Number is Prime or not Prime");
number = Int32.Parse(Console.ReadLine());
for(int i =2;i {
if(number % i == 0)
{
Console.WriteLine("Entered number is not Prime");
break;
}
}
if(number % i !=0)
{
Console.WriteLine("Entered Number is Prime");
}
Console.ReadLine();
}
}
答案 7 :(得分:0)
你的方法完全错了。素数是绝对的,永远不会改变。您最好的选择是预先生成一长串素数。然后提出一种算法来快速查找该数字以确定它是否在列表中。然后在你的情况下(因为你想列出给定范围内的所有内容,只需这样做)。该解决方案将比在运行时期间实现的任何素数查找算法快得多。如果输入的整数大于列表,那么您始终可以从该点开始实现算法。