练习题

我的实验题是第3(11%9+2)题:

实现Fibonacci数列功能,并进行测试(正常情况,异常情况,边界情况)。

功能设计

我设计的程序有三个功能:

  1. 退出程序
  2. 输入n,打印Fibonacci数列的前n项.
  3. 输入一个数,判断其是否是Fibonacci数列中的项.如果是,则打印出其实第几项;如果不是,则打印出“不是其中的项”的信息.

程序设计思路

1.主类:用于呈现欢迎用户的内容以及让用户输入他们想实现的功能,将这个值传递给Judge类进行判断.

2.Judge类,用于判断从主类中得到的功能的代号具体指向哪个功能,并进入功能类.

3.用两个功能类Function1,Function2分别实现两种功能:第一个功能即循环打印Fibonacci数列的第i项即可;第二项即将输入的数据与Fibonacci数列的每一项进行比较,如果与某一项相同则输出项数,如果那一项的值大于输入的值则停止比较,输出“找不到”.

4.两个功能的核心是求解Fibonacci数列的第n项.利用递归反复调用该类来实现.

实验代码

Test1.java

import java.util.Scanner;

public class Test1 {//此类用于实现欢迎及功能选择功能
    public static void main(String[] args) {
        String s="欢迎使用Fibonacci数列小程序!\n制作人:20165111朱思腾";
        System.out.println(s);
        for(int i=0;i<s.length();i++){
            System.out.printf("-");
        }//欢迎用户
        System.out.print("\n本程序可以实现如下三个功能:\n0.退出程序\n1.输出Fibonacci数列的前n项.\n2.判断输入的数据x是否是" +
                "Fibonacci数列中的项.\n请输入功能前的序号来执行相应功能:");//进行功能选择
        Scanner reader=new Scanner(System.in);
        int i=reader.nextInt();
        Judge judge=new Judge();
        judge.Judge(i);//将输入的功能序号传入Judge方法
    }
}

Judge.java

import java.util.Scanner;

public class Judge {
    void Judge(int i){//此类用于实现功能选择并将接下来所使用的值传给相应的Function(功能)类中.
        if(i==0){//退出程序
            System.out.println("程序已退出!欢迎下次使用!");
            System.exit(0);
        }
        if(i==1){
            System.out.print("现在正在使用功能1:输出Fibonacci数列的前n项.\n请输入n:");
            Scanner reader=new Scanner(System.in);
            int n=reader.nextInt();
            Function1 run=new Function1();
            run.Function(n);
        }
        else if(i==2){
            System.out.print("现在正在使用功能2:判断输入的数据是否是Fibonacci数列中的项.\n请输入数据x:");
            Scanner reader=new Scanner(System.in);
            int x=reader.nextInt();
            Function2 run=new Function2();
            run.Function(x);
        }
        else {
            System.out.println("无效的输入!");
        }
    }
}

Function1.java

import java.util.Scanner;

public class Function1 {//此类用于实现功能1
    void Function(int n){
        if(n<1){
            System.out.println("错误!项数不能为负!");
        }
        else {
            System.out.println("以下是Fibonacci数列的前" + n + "项");
            for (int i = 1; i <= n; i++) {
                Fibonacci fib = new Fibonacci();
                int y = fib.Fibonacci(i);
                System.out.print(y + "  ");
            }
        }
    }
}

Function2.java

import java.util.Scanner;

public class Function2 {//此类用于实现功能2
    void Function(int x){
        for(int i=1;;i++){
            Fibonacci fib=new Fibonacci();
            if(x==fib.Fibonacci(i)){
                System.out.println("已找到!"+x+"是Fibonacci数列的第"+i+"项.");
                break;
            }
            if(x<fib.Fibonacci(i+1)){
                System.out.println(x+"不是Fibonacci数列中的项.");
                break;
            }
        }
    }
}

Fibonacci.java

import java.util.FormatFlagsConversionMismatchException;

public class Fibonacci {//此类用于计算Fibonacci数列中的第n项,
    int Fibonacci(int n) {
        if(n<0){
            System.out.println("错误!Fibonacci数列的项数不能小于0.");
        }
        if (n == 1) {
             return  1;
         }
         if (n == 2) {
             return  2;
         }
         else {
             Fibonacci fib = new Fibonacci();
             return fib.Fibonacci(n - 1) + fib.Fibonacci(n - 2);
         }
     }
}

实验截图

1.正常情况测试
欢迎界面:

功能1:

功能2(正确):

功能2(错误):

2.异常情况测试

主要的异常情况是输入的功能代码不是0、1、2,以及功能1输入的项数不是大于1的数.
功能序号输入错误:

功能1输入的项数非法:

3.便捷情况测试

本程序没有边界情况需要测试.

实验思考

在C语言做类似实验的时候,当需要做输入的时候,我们会做一个输入的合法性检查。

//创建变量语句省略
ret=scanf("%d",&a);
if(ret!=1){
    printf("输入不合法!");
    fflush(stdin);
}

输入合法性检查如何在Java中实现呢?正在寻找方法并完善代码中!

更多相关文章

  1. 基于JavaScript实现验证码功能
  2. JAVA 实现tail -f 日志文件监控功能
  3. JSP+JavaBean实现用户登录功能

随机推荐

  1. Python数据分析实战:缺失值处理
  2. 数据分析实战:母婴商品分析
  3. pandas数据处理
  4. 给女朋友讲了讲 V8 引擎的“回调函数”!
  5. Android解决ViewPager嵌套ViewPager中多
  6. 一个真实问题,搞定三个冷门pandas函数
  7. 分析数万条旅游评论数据后,告诉你国庆“坑
  8. 让Python在后台自动解压各种压缩文件!
  9. 给女朋友写了一份前端学习路线。
  10. “你活该不去创业!”