减少 if-else 语句的数量和更简单的代码
Reduce the amount of if-else statements and simpler code
不要介意糟糕的编码,大约 1 周前开始学习...
一直在用我知道的命令进行 ProjectEuler.net 的挑战,但我已经结束了对我正在使用的公式使用太多 if-else 语句的方式......
我如何使用相同的公式编码但 cleaner/elegant?
double raiz, x;
int y, tot1 = 0, tot2, z, raiz2;
Console.WriteLine("Escreva o numero");
x = int.Parse(Console.ReadLine());
if (x == 2 || x == 3 || x == 5)
Console.WriteLine("eh primo");
else
if (x % 2 == 0 || x < 7)
Console.WriteLine("Numero {0} nao eh primo", x);
else
{
raiz = Math.Truncate(Math.Sqrt(x));
raiz2 = Convert.ToInt32(raiz);
z = Convert.ToInt32(x);
for (y = 3; y <= raiz2; y++)
{
tot1 = z / y;
tot2 = z % y;
if (tot2 == 0)
{
Console.WriteLine("{0} nao eh primo", x);
raiz2 = y;
}
else
if (y >= raiz2)
{
Console.WriteLine("{0} eh primo", x);
y+=raiz2;
}
}
if (y<=raiz2)
Console.WriteLine("{0} nao eh primo", x);
Console.ReadKey();
我正在使用这个公式求素数:
√PrimeNumber=SquareRoot
for (x = 3; x <= SquareRoot; x++)
if PrimeNumber % X = 0
"not prime"
else if
x == SquareRoot
"prime"
不要爱上 arrow-head anti-pattern。
我已经使用 multiple return
statements 将大部分代码提取为一个函数。否则,我只做了很少的修改来表达我的观点。
static void Main(string[] args)
{
double x;
Console.WriteLine("Escreva o numero");
x = int.Parse(Console.ReadLine());
if(IsPrime(x))
Console.WriteLine("eh primo", x);
else
Console.WriteLine("{0} nao eh primo", x);
Console.ReadKey();
}
private static bool IsPrime(double x)
{
double raiz;
int y, tot1 = 0, tot2, z, raiz2;
if (x == 2 || x == 3 || x == 5)
return true;
if (x % 2 == 0 || x < 7)
return false;
bool result = false;
raiz = Math.Truncate(Math.Sqrt(x));
raiz2 = Convert.ToInt32(raiz);
z = Convert.ToInt32(x);
for (y = 3; y <= raiz2; y++)
{
tot1 = z / y;
tot2 = z % y;
if (tot2 == 0)
{
result = false;//return
raiz2 = y;
}
else
if (y >= raiz2)
{
result = true;//return
y += raiz2;
}
}
if (y <= raiz2)
return false;
return result;
}
不要介意糟糕的编码,大约 1 周前开始学习...
一直在用我知道的命令进行 ProjectEuler.net 的挑战,但我已经结束了对我正在使用的公式使用太多 if-else 语句的方式......
我如何使用相同的公式编码但 cleaner/elegant?
double raiz, x;
int y, tot1 = 0, tot2, z, raiz2;
Console.WriteLine("Escreva o numero");
x = int.Parse(Console.ReadLine());
if (x == 2 || x == 3 || x == 5)
Console.WriteLine("eh primo");
else
if (x % 2 == 0 || x < 7)
Console.WriteLine("Numero {0} nao eh primo", x);
else
{
raiz = Math.Truncate(Math.Sqrt(x));
raiz2 = Convert.ToInt32(raiz);
z = Convert.ToInt32(x);
for (y = 3; y <= raiz2; y++)
{
tot1 = z / y;
tot2 = z % y;
if (tot2 == 0)
{
Console.WriteLine("{0} nao eh primo", x);
raiz2 = y;
}
else
if (y >= raiz2)
{
Console.WriteLine("{0} eh primo", x);
y+=raiz2;
}
}
if (y<=raiz2)
Console.WriteLine("{0} nao eh primo", x);
Console.ReadKey();
我正在使用这个公式求素数:
√PrimeNumber=SquareRoot
for (x = 3; x <= SquareRoot; x++)
if PrimeNumber % X = 0
"not prime"
else if
x == SquareRoot
"prime"
不要爱上 arrow-head anti-pattern。
我已经使用 multiple return
statements 将大部分代码提取为一个函数。否则,我只做了很少的修改来表达我的观点。
static void Main(string[] args)
{
double x;
Console.WriteLine("Escreva o numero");
x = int.Parse(Console.ReadLine());
if(IsPrime(x))
Console.WriteLine("eh primo", x);
else
Console.WriteLine("{0} nao eh primo", x);
Console.ReadKey();
}
private static bool IsPrime(double x)
{
double raiz;
int y, tot1 = 0, tot2, z, raiz2;
if (x == 2 || x == 3 || x == 5)
return true;
if (x % 2 == 0 || x < 7)
return false;
bool result = false;
raiz = Math.Truncate(Math.Sqrt(x));
raiz2 = Convert.ToInt32(raiz);
z = Convert.ToInt32(x);
for (y = 3; y <= raiz2; y++)
{
tot1 = z / y;
tot2 = z % y;
if (tot2 == 0)
{
result = false;//return
raiz2 = y;
}
else
if (y >= raiz2)
{
result = true;//return
y += raiz2;
}
}
if (y <= raiz2)
return false;
return result;
}