今天虽然发生的大事,但是生活还是一如既往的比较平稳的进行。十分感觉像做梦,但是又在朝目标不断前行着,就像艾伦说的“塔塔开,一字莫塔塔开”。
今天是学校的期中考试,但是还是要刷题的。看了下CSPOJ里面循环的题目,准备复习下水仙花数。但是敲完之后,我愣住了。
下面是第一次错误的代码
第一次写出来的水仙花错误代码
这个代码是运行超时,由于我不能在COPSJ上看到自己错哪里了,索性在vs上cv。
提示的错误信息
这个是信息是正确的,错在哪呢,还是等号运算符的先左还是先右的问题,对于i=temp,是把temp赋给i,但是temp没有初值呀,就算有初值,那也是不对的。
于是我在代码上找了自己问题,更注重在逻辑思维上,要是逻辑思维错了,整个程序崩盘确实很容易。
仔细看看,在for循环中,变量i是在变化的,但是在while中,变量i也是变化的,这导致了在while的条件里(i != 0) 有了可乘之机,就是在i = 0时结束while循环,但是 i = 0了,自然for循环跳出了。这样我就修改了代码,并且,sum初始化的位置也有问题,在每次for循环结束一次,sum的值都没有归零,所以sum==temp这个条件根本也就不能成立。
这是三个逻辑上的bug。
一下是修改后正确的代码。
修改后正确的代码
这样能输出正确答案。
总结:1、对于=运算符,一定要搞清楚先后顺序。
2、对于循环嵌套,尽量使用在每个循环里使用不同的变量,不要同一个变量。
3、对于变量初始化,一定要思考后看看在哪初始化,这种逻辑错误一旦犯了就很难找出来,所以要在第一次编写源代码时想到并且相对。