对数器的使用----bug测试,文章中含有测试源码

2023-11-17

当我们选择排序没有出现问题时,我们可以发现一个随机数组是有序的,会打印出 ‘选择排序没有毛病’。说明此时选择排序没有毛病。

package cn.Text;

public class LogarithmicDetector {
    //TODO      选择排序
    public static void selectionSort(int[] arr) {
        if (arr == null || arr.length < 2) {
            return;
        }
        for (int i = 0; i < arr.length - 1; i++) {
            int minIndex = i;
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[j] < arr[minIndex]) {
                    minIndex = j;
                }
            }
            swap(arr, i, minIndex);
        }
    }

    //TODO  交换
    public static void swap(int[] arr, int i, int j) {
        int tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }

    public static void insertionSort(int[] arr) {
        if (arr == null || arr.length < 2) {
            return;
        }
        for (int i = 1; i < arr.length; i++) { // 0 ~ i 做到有序
            for (int j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--) {
                swap(arr, j, j + 1);
            }
        }
    }

    // TODO 返回一个数组arr,arr长度[0,maxLen-1],arr中的每个值[0,maxValue-1]
    public static int[] lenRandomValueRandom(int maxLen, int maxValue) {
        int len = (int) (Math.random() * maxLen);
        int[] ans = new int[len];
        for (int i = 0; i < len; i++) {
            ans[i] = (int) (Math.random() * maxValue);
        }
        return ans;
    }

    //TODO  备份数组
    public static int[] copyArray(int[] arr) {
        int[] ans = new int[arr.length];
        for (int i = 0; i < arr.length; i++) {
            ans[i] = arr[i];
        }
        return ans;
    }

    /**
     * 判断是否是升序的
     * arr1和arr2一定等长
     * @param arr
     * @return
     */
    public static boolean isSorted(int[] arr) {
        //  没到两个数还比较啥升序,没他就越界了兄弟
        if (arr.length < 2) {
            return true;
        }
        int max = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (max > arr[i]) {
                return false;
            }
            max = Math.max(max, arr[i]);
        }
        return true;
    }

    public static void main(String[] args) {
        int maxLen = 5;
        int maxValue = 1000;
        int testTime = 10000;
        for (int i = 0; i < testTime; i++) {
            int[] arr1 = lenRandomValueRandom(maxLen, maxValue);
            //  TODO  备份arr1
            int[] tmp = copyArray(arr1);
            selectionSort(arr1);
            //如果是无序的
            if (!isSorted(arr1)) {
                //TODO 打印备份,找到例子
                for (int j = 0; j < tmp.length; j++) {
                    System.out.print(tmp[j] + " ");
                }
                System.out.println();
                System.out.println("选择排序错了!!!");
                break;
            }
            else{
                System.out.println("选择排序没毛病!!!");
            }
        }

    }

}

在这里插入图片描述
当我们故意修改选择排序,将原本的正确选择排序修改为错误的选择排序时,会打印出 ‘选择排序错了’,因为上面写了一个copy函数,所以会打印出错误的例子,这个时候我们可以根据例子去寻找bug。(当然当例子范围很大的时候我们可以修改是范围的大小,此处就是数组的大小)

package cn.Text;

public class LogarithmicDetector {
    //TODO      选择排序
    public static void selectionSort(int[] arr) {
        if (arr == null || arr.length < 2) {
            return;
        }
        for (int i = 0; i < arr.length - 1; i++) {
            int minIndex = i;
            for (int j = i + 1; j > arr.length; j++) {
                if (arr[j] < arr[minIndex]) {
                    minIndex = j;
                }
            }
            swap(arr, i, minIndex);
        }
    }

    //TODO  交换
    public static void swap(int[] arr, int i, int j) {
        int tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }

    public static void insertionSort(int[] arr) {
        if (arr == null || arr.length < 2) {
            return;
        }
        for (int i = 1; i < arr.length; i++) { // 0 ~ i 做到有序
            for (int j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--) {
                swap(arr, j, j + 1);
            }
        }
    }

    // TODO 返回一个数组arr,arr长度[0,maxLen-1],arr中的每个值[0,maxValue-1]
    public static int[] lenRandomValueRandom(int maxLen, int maxValue) {
        int len = (int) (Math.random() * maxLen);
        int[] ans = new int[len];
        for (int i = 0; i < len; i++) {
            ans[i] = (int) (Math.random() * maxValue);
        }
        return ans;
    }

    //TODO  备份数组
    public static int[] copyArray(int[] arr) {
        int[] ans = new int[arr.length];
        for (int i = 0; i < arr.length; i++) {
            ans[i] = arr[i];
        }
        return ans;
    }

    /**
     * 判断是否是升序的
     * arr1和arr2一定等长
     * @param arr
     * @return
     */
    public static boolean isSorted(int[] arr) {
        //  没到两个数还比较啥升序,没他就越界了兄弟
        if (arr.length < 2) {
            return true;
        }
        int max = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (max > arr[i]) {
                return false;
            }
            max = Math.max(max, arr[i]);
        }
        return true;
    }

    public static void main(String[] args) {
        int maxLen = 5;
        int maxValue = 1000;
        int testTime = 10000;
        for (int i = 0; i < testTime; i++) {
            int[] arr1 = lenRandomValueRandom(maxLen, maxValue);
            //  TODO  备份arr1
            int[] tmp = copyArray(arr1);
            selectionSort(arr1);
            //如果是无序的
            if (!isSorted(arr1)) {
                //TODO 打印备份,找到例子
                for (int j = 0; j < tmp.length; j++) {
                    System.out.print(tmp[j] + " ");
                }
                System.out.println();
                System.out.println("选择排序错了!!!");
                break;
            }
            else{
                System.out.println("选择排序没毛病!!!");
            }
        }

    }

}

在这里插入图片描述
代码来源于B站,侵权请联系删除

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对数器的使用----bug测试,文章中含有测试源码 的相关文章

随机推荐

  • 如何使用ChatGPT制作免费的数字人

    传统的数字人制作过程 制作属于自己的免费的数字人是一个复杂的过程 需要涉及多个方面的知识和技术 以下是一个大致的步骤指南 以帮助你开始这个过程 1 确定数字人的目标和设计 首先 你需要确定数字人的用途和目标 是用于虚拟助手 游戏角色还是其他
  • SpringBoot将文件上传到项目的根路径中,相对路径

    1 依赖
  • DLL调试方法 VS2012 C++ 有代码时

    把exe放到输出目录 并把调试 命令 设为 S o l u t i o n
  • vue 如何在一个页面上调用另一个页面的方法

    vue 如何在一个页面上调用另一个页面的方法 首先同一个vue实例来调用两个方法 所以可以建立一个中转站 建立 util js 中转站文件 任意位置 我是在 assets js util js import Vue from vue exp
  • MySQL基础知识每日总结(5)

    regexp检查总是返回0 没有匹配 或者1 匹配 一 CASE表达式 1 两种写法 简单case表达式 case sex when 1 then 男 when 2 then 女 else 其他 end 搜索case表达式 case whe
  • .sh 文件 注释

    usr bin env bash 不需要寻找程序在系统中的位置 只要程序在 PATH中 根据环境寻找并运行默认的版本 set e exit the script if an error happens MODEL TAR depparse
  • 华为校招机试 - 单词重量(Java)

    题目描述 每个句子由多个单词组成 句子中的每个单词的长度都可能不一样 我们假设每个单词的长度Ni为该单词的重量 你需要做的就是给出整个句子的平均重量V 输入描述 无 输出描述 无 用例 输入 Who Love Solo 输出 3 67 说明
  • 计算机组成原理期末考试题

    计算机组成原理期末考试试题及答案 一 选择题 1 完整的计算机系统应包括 D A 运算器 存储器和控制器 B 外部设备和主机 C 主机和实用程序 D 配套的硬件设备和软件系统 2 计算机系统中的存储器系统是指 D A RAM存储器 B RO
  • 交换机端口安全

    文章目录 一 802 1X认证 1 定义和起源 2 认证方式 本地认证 远程集中认证 3 端口接入控制方式 基于端口认证 基于MAC地址认证 二 端口隔离技术 1 隔离组 2 隔离原理 3 应用场景 首先可以看下思维导图 以便更好的理解接下
  • MinIO文件服务器快速部署和案例演示

    MinIO文件服务器 文章目录 前言 服务器部署 依赖配置 SpringBoot配置 方法模板类 方法使用示例 易错点和注意点 MinIO的文件上传时文件类型设置的坑 前言 这个MinIO服务用起来比较简单 配置和使用都非常快 1 博客案例
  • css设置滚动条样式

    废话不多说 直接上代码 1 设置全局滚动条样式 webkit scrollbar 滚动条整体样式 width 4px 高宽分别对应横竖滚动条的尺寸 height 1px webkit scrollbar thumb 滚动条里面小方块 bor
  • 传智书城项目修改(修改图片、文本),使用eclipse修改, 以及解决出现的乱码问题

    在开始本教程先 请确保已经导入项目并能在网页中显示 导入项目参考http t csdn cn Bl0JX 一 修改首页顶部 首页效果如下 在项目文件中找到head jsp文件 在右侧的布局文件代码中修改首页的文字和首页logo 修改logo
  • weston设置

    weston设置 屏幕旋转180度方法 修改标题栏位置 启动配置文件 屏幕旋转180度方法 编辑 etc xdg weston weston ini文件 增加如下语句 output name DSI 1 transform 180 其中na
  • buuctf-Web1

    在登陆界面用sql注入的各种手段都没用 注册进去看看 抓包后发现数据包有点像xss 也能使它弹窗 但是好像没什么用 用标题1 会有关于sql语句的弹窗 但是如果抓包就不会出现 也能说明是单引号闭合 1 就不行 能知道是sql注入也不容易 闭
  • 用Python制作一个随机抽奖小工具

    大家好 我是才哥 最近在工作中面向社群玩家组织了一场活动 需要进行随机抽奖 参考之前小明大佬的案例 再结合自己的需求 做了一个简单的随机抽奖小工具 今天我就来顺便介绍一下这个小工具的制作过程吧 先看效果 1 核心功能设计 针对随机抽奖的小工
  • 自动控制原理知识点梳理——1. 自动控制的一般概念 & 2. 控制系统的数学模型

    目录 1 自动控制的一般概念 1 1知识梳理 逻辑图 2 控制系统的数学模型 2 1知识梳理 逻辑图 2 2补充内容 2 2 1传递函数的零点和极点 2 2 2典型环节及其传递函数 2 2 3相同的特征多项式和开环传递函数定义 2 2 4由
  • minecraft正版多人服务器,我的世界:“服务器的潜规则”,有的保护玩家,也有的打破平衡...

    多人联机 陪伴多数玩家的青春 点点滴滴 都是付出的时间与精力 如今 MC的 服务器 玩法愈来愈丰富 规则越来越多 那么 服务器内究竟有何潜规则呢 服务器控制台权限 gt OP权限 多数玩家都有这样的认为 OP权限在服务器中处在顶尖地位 那到
  • 税务大比武网络攻防复习(完整版)

    目录 信息化建设与管理 计算机终端设备 通信与网络 数据管理与应用 软件开发 计算与存储 基础设施保障 网络安全 网络安全基础 网络安全管理 密码学 软件开发安全 主机 数据库 中间件安全 网络与通信安全 网络攻击 信息收集 口令攻击和软件
  • uniapp小程序练手项目并上线

    如题 做一个自己的小程序 并在各大小程序开发者平台上线 背景 因没有小程序开发经验 且前端知识掌握得不好 作为一个小程序爱好者 总想有一款自己的小程序 同时也想有一款自己的app 虽然目前还没有实现 在整体难度上来说 小程序的实现比app的
  • 对数器的使用----bug测试,文章中含有测试源码

    当我们选择排序没有出现问题时 我们可以发现一个随机数组是有序的 会打印出 选择排序没有毛病 说明此时选择排序没有毛病 package cn Text public class LogarithmicDetector TODO 选择排序 pu