前端入门学习遇到的问题:
刚刚学习了js中的两个循环语句for和while,因为几天前就接触了for循环,自己用起来更加顺手,今天找了几道入门的编程问题,其中有一道遇到了问题,题目如下:
红白球共25个,白黑球共31个,红黑球共28个,求三种球各有多少?求红白黑球的个数;
方法1:
var red, black, white;
for (red = 1; red <= 25; red++) {
black = 28 - red; //for (black = 1; black <= 28; black++){}
white = 25 - red;//for (white = 1; black <= 25; black++){}
if (red + white == 25 && white + black == 31 && red + black == 28) {
console.log('红球:' + red + '个;' + '黑球:' + black + '个;' + '白球:' + white + '个');
}
一个最基础的for循环语句,在数学问题中也就是一个二元一次方程组,设红球为x,黑球为y,白球为z,则x+z=25,y+z=31,x+y=28。解方程得:红球:11个;黑球:17个;白球:14个。通过上面的两个for循环和一个判断语句也能轻松获得结果;
解题思路:从红球开始为1开始进入第一个for循环的第一次循环,黑球为black = 28 - red;,白球为 white = 25 - red;(这里的黑球和白球也可以用两个for循环,从1个开始进入循环然后判断,但是该方法多进行了很多次运算)。进入if判断语句同时满足三个条件则输出三种球的个数。
但是遇到问题的是刚接触的while循环语句,前面也用while写了几道题都没有出现问题,下面是最后更改的正确结果以及自己遇到问题以后的查找问题的思路;
方法2
var red = 1;
while (red <= 25) {
var black = 28 - red;
var white = 25 - red;
if (red + white == 25 && white + black == 31 && red + black == 28) {
console.log('红球:' + red + '个;' + '黑球:' + black + '个;' + '白球:' + white + '个');
}
red++;
continue;
}
以上为最后的正确方案;最初的错误版本为:
因为是刚开始学习和练习,就把所有的while循环都写出来了,等到测试输出结果的时候就一直报错,我就开始找错误,从最开始的变量名开始找,看看三个变量名从头到位是否有写错的,找了一遍没有,然后就看循环语句的判断条件还是没有,if条件也是我从方法1直接复制过来的,也没有错误;找了一遍没有任何错误,看样子不是代码错误。
然后我就把方法1复制在了最下面运行,可以运行出来答案,就说明上面的内容没有错误,因为js是一行一行的编译运行,如果上面出现错误,那么下面就不可能运行出来;所以我就还是回到上面的代码,开始想是不是没有满足if条件的内容啊!然后就把整个if语句注释,写了一个输出red的值,就能够运行出来了,果然还有if语句出现了问题,然后我就把&&换成了||这样的话应该能运行出来很多结果,但是只出现了两个red为1的两组数据,这是就发现了变量初始化的问题,应该紧贴着while上面来写,最后换了位置就成功运行出来了。
总结:刚刚接触js语言,从数学的解题思路开始,然后利用相关代码编写,然后自己不断优化、简写自己的代码,感觉很有趣!