关于此次习题过程中遇到的问题解读分析及测试结果还有一些小感悟,如下:
- 题目需求
- 题目分析
- 解决思路及方法
- 代码及测试结果
(1)题目需求
3 -> 'Fizz'
5-> 'Buzz'
7-> 'Whizz'
%(3 * 5)=0->'FizzBuzz' // 3和5共同的倍数
%(3 * 7) =0-> 'FizzWhizz'
%(5 * 7)=0 ->'BuzzWhizz'
%(3 * 5 * 7)=0 ->'FizzBuzzWhizz' //run 的参数为 3、5和7共同的倍数
其余:->num // 如:run(2) return '2'
(2)题目分析
从题目要求来看我们需要实现输入值num与3,5,7及3,5,7的倍数组合输出对应的字符串,对一个数字的判断分析流程如下:
参数num
->if(num%3==0)
->if(num%5==0)
->if(num%7==0)
返回num.toString();
(3)解决思路和方法
对3,5,7和"Fizz","Buzz","Whizz"采用数组存储,原因:
- 数组存储方便进行改变参数和需求,例如,换成不同数字及长度的因数(例:2,3,5,11)或字符串(例:“l”,"love","China","!"),增强代码可复用性。
- 数组方便进行for循环控制变量自动判断字符串的连接,而不是直接赋值。
- 用sum来存返回的连接的字符串,可以不破坏num的本值。
核心代码:
{
var a=new Array(3,5,7);
var res=new Array("Fizz","Buzz","Whizz");
var sum=' ',flag=0;
for(var i=0;i<a.length;i++){
if((num%a[i])==0) sum+=res[i];
flag=1;
}
if(flag==0)sum=num;
return sum.toString();
}
(4)代码及测试结果
function run(num) {
var a=new Array(3,5,7);
var res=new Array("Fizz","Buzz","Whizz");
var sum=' ',flag=0;
for(var i=0;i<a.length;i++){
if((num%a[i])==0) sum+=res[i];
flag=1;
}
if(flag==0)sum=num;
return sum.toString();
}
function test1(num) {
let result = run(num);
//if(result == 105) {
//document.write('The test 1 failed')
//}else {
document.write('The test '+num+' result is : '+ result+'<br>')
// }
}
test1(105)
test1(15)
test1(35)
test1(21)
test1(3)
test1(5)
test1(7)
test1(12)
测试样图:
The test 105 result is : FizzBuzzWhizz
The test 15 result is : FizzBuzz
The test 35 result is : BuzzWhizz
The test 21 result is : FizzWhizz
The test 3 result is : Fizz
The test 5 result is : Buzz
The test 7 result is : Whizz
The test 12 result is : Fizz