这两天一直在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!!!