迭代和JDB

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();

顺利编译、运行

代码托管

原文地址:https://www.cnblogs.com/zxy20175227/p/10624120.html