20175227张雪莹 2018-2019-2 《Java程序设计》
迭代和JDB
-
要求
- 使用C(n,m)=C(n-1,m-1)+C(n-1,m)公式进行递归编程实现求组合数C(m,n)的功能
- m,n 要通过命令行传入
- 提交测试运行截图(至少三张:正常如c(3,2)、异常如c(2, 3)、边界情况如c(m,m))
- 提交正常情况下用JDB调试程序c(X,2)的截图,X为学号最后一位+3,至少四张截图
- 把代码推送到码云
-
程序为:
import java.util.Scanner;
class Suanfa{
public int diedaiSuanfa(int n , int m) {
if(n==0||n<m)
return 0;
else if(n==m||m==0)
return 1;
else if(m==1)
return n;
else
return diedaiSuanfa(n-1, m-1)+diedaiSuanfa(n-1,m);
}
}
public class Diedai {
public static void main(String args[]) {
Suanfa sum=new Suanfa();
System.out.print("请输入n,m(回车确认):");
Scanner reader=new Scanner(System.in);
int a=reader.nextInt();
int b=reader.nextInt();
System.out.println("C("+a+","+b+")="+sum.diedaiSuanfa(a,b));
}
}
-
正常情况
-
边界情况
-
异常情况
-
JDB调试下,求C(10,2)
-
问题1:编译课后时出现
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at Dieda
问题 -
问题1解决方案:是输入数据时发生数组越界的异常,之前用的是:
int [] a = new int [args.length];
for(int i=0; i<args.length;i++) {
a[i] = Integer.parseInt(args[i]);
}
更换了输入数据的形式后为:
Scanner reader=new Scanner(System.in);
int a=reader.nextInt();
int b=reader.nextInt();
顺利编译、运行