GoTo程序的C#Sudo代码
我的任务是重新编写一个使用goto语句的程序,其唯一目的是证明它们是多么令人沮丧,我知道它们确实非常令人沮丧。在翻阅调试器几个小时后,我仍然遇到问题,有没有人可以为我伪代码,我可以更好地理解它?除了为每个goto创建if和else语句之外,我迷路了GoTo程序的C#Sudo代码,c#,goto,code-conversion,C#,Goto,Code Conversion,我的任务是重新编写一个使用goto语句的程序,其唯一目的是证明它们是多么令人沮丧,我知道它们确实非常令人沮丧。在翻阅调试器几个小时后,我仍然遇到问题,有没有人可以为我伪代码,我可以更好地理解它?除了为每个goto创建if和else语句之外,我迷路了 namespace Assignment_03_Nasty_Code { class Assignment03 { static void Main(string[] args) {
namespace Assignment_03_Nasty_Code
{
class Assignment03
{
static void Main(string[] args)
{
Console.WriteLine("Assignment 03 = " + new Assignment03().Solve());
}
public int Solve()
{
int result = 0;
int upperSearchLimit = 1_000_000;
Console.WriteLine("Building list of primes...");
ArrayList primes = Utils.BuildListOfPrimes(upperSearchLimit);
Console.WriteLine(" Done.");
// Step through the odd composite numbers
for (int i = 19; i < upperSearchLimit; i+= 2)
{
Label02:
if (primes.Contains(i))
goto Label03;
// Is the number divisible by a prime?
int j = 0;
Boolean match = false;
Label01:
int tmp;
int prime = (int)primes[j];
tmp = i - prime;
int half = tmp /= 2;
int squareRoot = (int) Math.Sqrt(half);
if (tmp != squareRoot * squareRoot)
goto Label04;
// We got one
//System.out.println(i + " is a composite that can be written as the sum of a prime and twice a square");
match = true;
Console.WriteLine(i + " = " + (int)primes[j] + " + 2 * " + half );
Label04: // Second goto
j++;
if ((int)primes[j] < i)
goto Label01;
if (match == false)
{
Console.WriteLine("No match for " + i);
result = i;
break;
}
//goto Label02;
Label03: // First goto
int x;
}
return result;
}
}
}
名称空间分配\u 03\u
{
课堂作业03
{
静态void Main(字符串[]参数)
{
Console.WriteLine(“Assignment 03=“+newassignment03().Solve());
}
公共int Solve()
{
int结果=0;
int upperSearchLimit=1_000_000;
Console.WriteLine(“构建素数列表…”);
ArrayList primes=Utils.BuildListOfPrimes(搜索上限);
控制台。WriteLine(“完成”);
//单步遍历奇数复合数
对于(int i=19;i<搜索上限;i+=2)
{
Label02:
if(素数包含(i))
后藤标签03;
//这个数可以被素数整除吗?
int j=0;
布尔匹配=假;
标签01:
int tmp;
int素数=(int)素数[j];
tmp=i-素数;
int half=tmp/=2;
int平方根=(int)Math.Sqrt(一半);
if(tmp!=平方根*平方根)
goto Label04;
//我们有一个
//System.out.println(i+“是一个复合词,可以写成一个素数和两个平方的和”);
匹配=真;
Console.WriteLine(i+“=”+(int)素数[j]+“+2*”+half);
Label04://第二次转到
j++;
if((int)素数[j]
我在您的代码中替换了转到
,这就是结果
public int Solve()
{
var result = 0;
var upperSearchLimit = 1_000_000;
Console.WriteLine("Building list of primes...");
ArrayList primes = Utils.BuildListOfPrimes(upperSearchLimit);
Console.WriteLine(" Done.");
for (var i = 19; i < upperSearchLimit; i += 2)
{
if (primes.Contains(i))
{
continue;
}
var j = 0;
var match = false;
do
{
int tmp;
var prime = (int)primes[j];
tmp = i - prime;
var half = tmp /= 2;
var squareRoot = (int)Math.Sqrt(half);
if (tmp == squareRoot * squareRoot)
{
match = true;
Console.WriteLine(i + " = " + (int)primes[j] + " + 2 * " + half);
}
j++;
} while ((int)primes[j] < i);
if (match == false)
{
Console.WriteLine("No match for " + i);
result = i;
break;
}
}
return result;
}
public int Solve()
{
var结果=0;
var上限=1_000_000;
Console.WriteLine(“构建素数列表…”);
ArrayList primes=Utils.BuildListOfPrimes(搜索上限);
控制台。WriteLine(“完成”);
对于(var i=19;i
我要做的第一件事就是通过格式化程序运行代码!这种做法违背了目的,然后我再次认为目的是教我永远不要使用goto语句,好吧,我不需要告诉我为什么在这之后。他的意思是修复缩进,“文本墙”是不必要的硬,因为它在可维护性方面有多个问题,“goto”语句只是其中一个问题。首先修复缩进,然后开始处理goto。“我想目的是教我永远不要使用goto语句”——好吧,任务完成了。但我认为还有更多的教训需要吸取:1。缩进对代码的可读性至关重要。2.不要试图“改变”那个代码。了解它的功能,然后“正确地做”。。。仅举2个例子。“Label03:;就足够了”-我想这是“课程”的一部分)@KenY NOP明确表示不想要“完成的代码”解决方案。(虽然没有投反对票,但是^^^)我真的希望得到代码功能的概要,而不是硬编码的答案,但这确实有效,谢谢。不过这更容易理解。@Fildor是真的,这不是我想要的,我想有人给我伪代码,这样我就能自己弄明白,但我用Ubuntu太多了,而是写了sudo,所以我想人们会感到困惑。而且,这个问题被否决了,我认为当有人试图帮助我时,我至少应该给予一些信任。我不喜欢投否决票,除非它真的需要。@shockemc我不是说它应该被否决。它就在这里,所以“请给我代码”的问题是非常不受欢迎的。你的问题不是那种只要求提纲的问题。所以,用一个完全固定的复制粘贴代码解决方案来回答这个问题可能会鼓励人们提出第一类问题。但是,嗯。。。世界仍在转变:)