1、 计算整数X和整数Y的最大公约数
请用类和方法实现(定义一个类,在类中定义一个求最大公约数的方法),命名时请按照规范命名。在main方法中获取用户输入的两个整数,调用之前写的方法,输出它们的最大公约数。利用FindBugs查找程序中是否存在bug。
import java.util.Scanner;
public class Demo {
public void compare(int a,int b){
int i = a>b?a:b;
for(;i>0;i--){
if(a%i==0&&b%i==0){
System.out.println("a、b的最大公约数为"+i);
break;
}
}
return;
}
public static void main(String[] arg){
Demo demo = new Demo();
System.out.println("请输入a:");
Scanner num1 = new Scanner(System.in);
int a=num1.nextInt();
System.out.println("请输入b:");
Scanner num2 = new Scanner(System.in);
int b=num2.nextInt();
demo.compare(a, b);
}
}
2、 逻辑覆盖的应用
按照所给的程序流程图,分别写出语句覆盖、分支覆盖的测试用例,以及它所覆盖的路径。
语句覆盖:
X | Y | 路径 |
3 | 2 | abc |
5 | 0 | aef |
4 | 0 | aeg |
分支覆盖:
X | Y | 路径 |
3 | 2 | abc |
3 | 1 | abd |
5 | 0 | aef |
4 | 0 | aeg |
附加题:根据程序流程图,写出代码(定义一个类和方法来实现),用JUnit生成单元测试,并利用前面设计的测试用例进行测试。
public class Demo {
public void demo(int x,int y){
if(x<4||y>0){
if(y>1){
y=y+1;
System.out.println("X="+x+",Y="+y);
}
else{
System.out.println("X="+x+",Y="+y);
}
}
else{
if(x>=5){
x=x-y;
System.out.println("X="+x+",Y="+y);
}
x=x+y;
System.out.println("X="+x+",Y="+y);
}
}
}
测试用例:
import static org.junit.Assert.*;
import org.junit.Test;
public class DemoTest {
public static void main(String[] args){
Demo demo =new Demo();
demo.demo(3,2);
demo.demo(3,1);
demo.demo(5,0);
demo.demo(4,0);
}
}