课堂作业-Bag类的实现

要求:

  1. 代码运行在命令行中,路径要体现学号信息,IDEA中,伪代码要体现个人学号信息
  2. 参见Bag的UML图,用Java继承BagInterface实现泛型类Bag,并对方法进行单元测试(JUnit),测试要涵盖正常、异常情况、边界情况。

    实验思路

    0.编写接口

    1.编写伪代码

    2.实现接口

    3.使用junit进行测试

    代码编写的主要思想分析

    使用数组实现Bag类,达到可增可删可判断是否为空等等。

  • 0 . 定义一个Object类型的数组,其长度为0
  • 1 . 判断是否为空时只需要判断其数组的长度是否为0
  • 2 . 增加新元素时,先定义一个比原来长度增加1的数组,再将原来的数组重新赋值到新的数组里面
  • 3 . 删除指定元素时,先将元素的下标找出来,用for循环将指定元素后面的元素覆盖指定元素
  • 4 . 获取某元素在Bag里面的数量,用线性查找便可完成
  • 5 . 判断某元素在Bag是否存在,用线性查找便可
public class Bag implements BagInterface {

    private Object[] data1 = new Object[0];
    int q = 0, index;
    Object result;

    public boolean isEmpty() {
        if (data1.length != 0)
            return false;
        else
            return true;
    }

    public boolean add(Object anEntry) {
        q++;
        Object[] objects = new Object[q - 1];
        objects = sum(data1);
        data1 = new Object[q];
        for (int i = 0; i < data1.length - 1; i++) {
            data1[i] = objects[i];
        }
        data1[q - 1] = anEntry;
        return true;
    }

    public boolean remove(Object anEntry) {
        int index = linearSearch(data1, anEntry);
        for (int i = index + 1; i < data1.length; i++) {
            data1[index] = data1[i];
        }
        q--;
        Object[] objects = new Object[q + 1];
        objects = sum(data1);
        if (q <= 0)
            return true;
        else {
            data1 = new Object[q];
            for (int i = 0; i < q; i++) {
                data1[i] = objects[i];
            }
        }
        return true;
    }

    public int getCurrentSize() {
        return data1.length;
    }

    public void clear() {
        data1 = new Object[0];
    }

    public int getFrequencyOf(Object anEntry) {
        int count = 0;
        for (int i = 0; i < data1.length; i++) {
            if (anEntry == data1[i]) {
                count++;
            }
        }
        return count;
    }

    public boolean contains(Object anEntry) {
        for (int i = 0; i < data1.length; i++) {
            if (anEntry == data1[i])
                return true;
        }
        return false;
    }

    public Object[] sum(Object[] objects) {
        Object[] objects1 = new Object[objects.length];
        for (int i = 0; i < objects.length; i++) {
            objects1[i] = objects[i];
        }
        return objects1;
    }

    public static int linearSearch(Object[] data, Object target) {
        int index = 0;
        for (int i = 0; i < data.length; i++) {
            if (target == data[i]) {
                index = i;
            }
        }
        return index;
    }

    public Object[] toArray() {
        insertionSort(data1);
        return data1;
    }

    public static void insertionSort(Object[] data) {
        for (int index = 1; index < data.length; index++) {
            Object key = data[index];
            int position = index;
            // Shift larger values to the right
            while (position > 0 && data[position - 1].equals(key)) {
                data[position] = data[position - 1];
                position--;
            }
            data[position] = key;
        }
    }
}

junit测试

import junit.framework.Test;
import junit.framework.TestSuite;
import junit.framework.TestCase;

import static org.junit.Assert.assertEquals;

/**
 * Bag Tester.
 *
 * @author <Authors name>
 * @version 1.0
 * @since <pre>09/25/2017</pre>
 */
public class BagTest extends TestCase {

    public BagTest(String name) {
        super(name);
    }

    public void setUp() throws Exception {
        super.setUp();
    }

    public void tearDown() throws Exception {
        super.tearDown();
    }

    /**
     * Method: isEmpty()
     */
    public void testIsEmpty() throws Exception {
//TODO: Test goes here...
        assertEquals(true, new MyArrayList().isEmpty());
    }

    /**
     * Method: add(Object anEntry)
     */
    public void testAdd() throws Exception {
//TODO: Test goes here...
        MyArrayList bag = new MyArrayList();
        bag.add(1);
        assertEquals(true, bag.add(5));
    }
    @org.junit.Test
    public void testremove() throws Exception {
        MyArrayList bag = new MyArrayList();
        bag.add(7);
        bag.add(4);
        assertEquals(true, bag.remove(4));
    }

    @org.junit.Test
    public void testgetCurrentSize() throws Exception{
        MyArrayList bag = new MyArrayList();
        bag.add(1);
        bag.add(3);
        assertEquals(2,bag.getCurrentSize());

    }

    @org.junit.Test
    public void testcontains() throws Exception{
        MyArrayList bag = new MyArrayList();
        bag.add(1);
        bag.add(3);
        assertEquals(false, bag.contains(2));
    }
}

课堂作业-Bag类的实现的更多相关文章

  1. 课堂作业Complex类的实现

    #include <iostream> #include <cmath> using namespace std; class Complex{ public: Complex ...

  2. 20162320刘先润第三周Bag类测试

    前言 以下内容是本周Bag代码的课后作业,要求是完成伪代码.产品代码和测试代码,为了书写方便我将伪代码以注释的形式写在了产品代码的后面 测试步骤 1.首先对Bag类引用BagInterface的代码进 ...

  3. 栋哥你好,让我们回顾最初认识C++的时候(课堂作业)

    计算器的第一步,至今还记记忆犹新,本次的课堂作业,便是那个框架.闲话少叙,代码如下传送门: Main.cpp #include "stdafx.h" #include<ios ...

  4. 课堂实验-Bag

    这次的课堂实验比较简单,但尴尬的是竟然没有做出来,自己的代码能力下降了不少.IDEA的Junit测试出了问题.所以这次实验是和结对伙伴结对编程写的. public class Bag<T> ...

  5. Java课程课堂作业代码

    前言 本文章只是单纯记录课堂老师布置的课堂作业代码,题目都比较简单,所以没有写解题思路,相信大家都能理解,当然其中有的解法和代码不是最优的,当时只是为了完成题目,后来也懒得改了,如果有不恰当或者不正确 ...

  6. C#基础第八天-作业-设计类-面向对象方式实现两个帐户之间转账

    要求1:完成以下两种账户类型的编码.银行的客户分为两大类:储蓄账户(SavingAccount)和信用账户(CreditAccount),两种的账户类型的区别在于:储蓄账户不允许透支,而信用账户可以透 ...

  7. 《Java 程序设计》课堂实践项目-类定义

    <Java 程序设计>课堂实践项目类定义 课后学习总结 目录 改变 类定义实验要求 课堂实践成果 课后思考 改变 修改了博客整体布局,过去就贴个代码贴个图很草率,这次布局和内容都有修改. ...

  8. 仿ArrayList功能的bag类

    仿ArrayList功能的bag类 要想做到能够实现ArrayList功能,首先要有一个能往里填任何类型元素的的空间,但是不能用ArrayList来创建空间,这样这个项目就没有意义,因此,我创建了一个 ...

  9. 20155213 第十二周课堂作业MySort

    20155213 第十二周课堂作业MySort 作业要求 模拟实现Linux下Sort -t : -k 2的功能 参考 Sort的实现 提交码云链接和代码运行截图 初始代码 1 import java ...

随机推荐

  1. E题hdu 1425 sort

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1425 sort Time Limit: 6000/1000 MS (Java/Others)    M ...

  2. 4.FireDAC组件快照 二

    TFDUpdateSQL 生成添加,删除,修改SQL语句 TFDMetaInfoQuery 查询数据源信息 TFDEventAlerter 负责处理数据库事件通知 使用TFDEventAlerter类 ...

  3. 2015多校第6场 HDU 5361 并查集,最短路

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5361 题意:有n个点1-n, 每个点到相邻点的距离是1,然后每个点可以通过花费c[i]的钱从i点走到距 ...

  4. Cause: java.lang.ClassCastException: java.lang.String cannot be cast to org.apache.ibatis.mapping.MappedStatement

    我用的是pagehelper 4.2.0,利用其进行表单的分页处理并进行展示,在第一次执行的时候能够看到分页后的结果,刷新一下第二次就显示不出来,控制台出现: Cause: java.lang.Cla ...

  5. ajax之深入解析(2)

    我们前面实现了用原生的JavaScript代码实现ajax的异步数据传输.接下来,我们再使用一个流行的js框架jQuery来实现ajax. 通过 jQuery AJAX 方法,我们能够使用 HTTP ...

  6. PHP在变量前面加&是什么意思

    比如: <? php $a = 'c' ; $b = & $a ; //表示$b 和 $a 引用了同一个变量 $a = 'abc' ; //这里重置了$a echo $b ; //将输出 ...

  7. scrapy再学习与第二个实例

    这周对于Scrapy进一步学习,知识比较零散,需要爬取的网站因为封禁策略账号还被封了/(ㄒoㄒ)/~~ 一.信息存储 1.log存储命令:scrapy crawl Test --logfile=tes ...

  8. 微信小程序实战篇-下拉刷新与加载更多

    下拉刷新 实现下拉刷新目前能想到的有两种方式 1. 调用系统的API,系统有提供下拉刷新的API接口 2. 监听scroll-view,自定义下拉刷新,还记得scroll-view里面有一个binds ...

  9. BootStrap 实现导航栏nav透明,nav子元素文字不透明

    在给nav 的属性赋值 opacity:0.0透明度时会导致nav内子元素会继承opacity属性.此时再对子元素赋值opacity:1.0 时会导致 子元素实际opacity值为0.0*1.0=0. ...

  10. 利用CSS3伪类做3D按钮

    这是通过css3伪类实现的3d按钮,html代码为: <div id="container_buttons"> <p><a class="a ...