FreeCodeCamp中的一个编程问题

这两天一直在FCC上调代码,过程值得记录一下~(上一篇中有推荐过这个网站)

------------------------------这里是问题的分割线---------------------------------

这里给出了一个查找表,然后实现通过查找“firstName”,在查找表中得到相关其他信息。

------------------------------------------问题结束------------------------------------------------

已给出的查找表如下:(当然这个不太重要)

给出框架如下:(跟不给没区别)

编程思路其实在问题中已经给出,问题在于按照这个思路编程的过程中:

首先我采用for循环,想找出给定的firstName所对应的在查找表中的位置,即找出contacts[i]中的i值,这点很容易实现:

这是我就迎来了第一个问题,当时好久没想通:

结果居然是个“空”。。。现在想来,分析结果如下:

1、结果没有报错。说明程序语法上没有问题。

2、由程序可知,如果出现contacts[i][firstName]==firstName,会返回i的值,这里并没有,说明循环一直运行下去,

直到i=contacts.length。而给出的测试条件可以看出,“Akira”是存在于查找表中的,所以应该是判断语句出现问题。

3、判断语句中,首先可以确定,语句右边是没有错的,那么问题就可能出现在左半句中。我们知道,表示多维数列中的元

素,可以用[]或者. ,示例如下:

     contacts.i和contacts[i],但注意,此处两种表示方法在语法上均没有错误,但不一定是等价的。例如在本程序中,i

为变量,contacts[i]表示contacts表中的第i个子序列,contacts.i表示contacts表中ID为i的子序列。

反观上面的判断语句,contacts[i]的表示方式没错,但contacts[i][firstName]就存在歧义,此处我想表达的应该是第

i个子序列中ID为firstName对应的序列,其正确表达方式为contacts[i].firstName(可能开发者的目的就是通过这个细节强化

我们对[]和.使用环境的区分)。

至此,第一个问题解决完毕~

然后,在判断出i值后,只需添加判断语句即可,如下:

 

结果居然是酱的。。。

这个“0”是什么鬼!淡定,分析问题。。。

1、语法没错

2、五个要求居然有一个实现了。能够顺利实现“No such contact”,说明后面的判断语句也没错。

3、结果是个“0”,貌似是“Akira”的序列号呢~所以不会是函数返回了i的结果吧!

百度之下,发下自己犯了最原始的错误。。。

return----跳出程序

break----跳出最近的一层循环

So......接着改程序!

 

终于实现各种条件下的要求!!!

其实,如果只是这样,我会在一个问题上纠结这么久么?并不会!

所以问题在哪呢?问题在于,lz作死的没有按照开发者给出的思路编程(果然呐,天道好轮回!)

这里贴一下lz最最最原始的版本,现在看起来,真的该去看脑科的。。。

PS:永远不要在循环里嵌套这么多if!!!

原文地址:https://www.cnblogs.com/bees/p/5567690.html