任务需求:
1.打印出从1到100的数字, 2.将其中3的倍数替换成“Fizz”, 3.5的倍数替换成“Buzz”, 4.既能被3整除、又能被5整除的数则替换成“FizzBuzz”;
看到需求非常简单,想到的最简单的实现方法是for循环中调用System.print打印实现,但这种方式不能接
收参数,不便做单元测试,于是封装了打印方法,传入一个数值,返回数值或数值对应的单词,分别传入
1-100,即可按需求打印出内容。用这种方式,虽然调用方法次数比较多,执行时间长,但单元测试比较简
单,可以通过给该方法传入各种不同的数值,验证结果是否正确。
代码:
package jiker.lesson1;
/**
* 1.打印出从1到100的数字,
* <p>
* 2.将其中3的倍数替换成“Fizz”,
* <p>
* 3.5的倍数替换成“Buzz”,
* <p>
* 4.既能被3整除、又能被5整除的数则替换成“FizzBuzz”。
*/
public class FizzBuzz {
public static void main(String[] args) {
FizzBuzz fizzBuzz = new FizzBuzz();
for (int i = 1; i <= 100; i++) {
System.out.println(fizzBuzz.printValue(i));
}
}
public String printValue(int i) {
if(i<=0 || i > 100) {
return "";
}
String printValue = String.valueOf(i);
if ((i % 3 == 0) && (i % 5) == 0) {
printValue = "FizzBuzz";
} else if (i % 3 == 0) {
printValue = "Fizz";
} else if (i % 5 == 0) {
printValue = "Buzz";
}
return printValue;
}
}
//测试用例
import jiker.lesson1.FizzBuzz;
import org.junit.Assert;
import org.junit.Test;
public class FizzBuzzTest {
@Test
public void testIntegerInput() {
FizzBuzz fizz = new FizzBuzz();
for(int i= -100; i < 999999; i++){
if(i<1 || i > 100) {
Assert.assertEquals(fizz.printValue(i), "");
} else {
if ((i % 3 == 0) && (i % 5) == 0) {
Assert.assertEquals("FizzBuzz", fizz.printValue(i));
} else if (i % 3 == 0) {
Assert.assertEquals("Fizz", fizz.printValue(i));
} else if (i % 5 == 0) {
Assert.assertEquals("Buzz", fizz.printValue(i));
}
}
}
}
}