首页 > 编程语言 >Pairwise实现(Java篇)

Pairwise实现(Java篇)

时间:2024-05-23 16:20:47浏览次数:30  
标签:Java 实现 System int length Pairwise str println out

import java.util.HashMap;


/**
 * PairWise(成对)测试方法
 * author: likeqc
 * date: 2021-4-4 11:06:59
 */
class PairWise {
    /**
     * @param str String[][],二维数组,一维数组 str[i] 中存放第 i 个因素的因子
     */
    private static void solution(String[][] str) {
        System.out.println());
        if (str == null) {
            return;
        }
      //  // 传统方式测试用例数量
        int sum = 1;
      //  // 符合要求的测试用例数量
        int count = 0;
        HashMap hashMap = new HashMap();
        //遍历每一个因子
        for (int i = 0; i < str.length; i++) {
            //特殊情况:某个因子没法取值
            if (str[i].length < 1) {
                System.out.println("输出的数据错误!");
                return;
            }
            //所有因子的能取值的个数相乘就是笛卡尔积,得到正交分析法的全排列
            sum *= str[i].length;
        }
        //初始化一个和因子个数相同的维度数组
        int[] one = new int[str.length];
        //开始pairwise算法的核心,遍历正交分析法得到的组合用例个数相同的次数
        for (int i = 0; i < sum; i++) {
            // //创造一个新的测试用例(传统方法,暴力所有可能的测试用例)
            int carry = 1;
            //从后往前遍历因子
            for (int j = str.length - 1; j >= 0; j--) {


                if (i == 0) {
                    continue;
                }
                //X % Y时, 如果, X < Y 的话, 回传值就是 X
                one[j] = (one[j] + carry) % str[j].length;
                if (carry == 1 && one[j] == 0) {
                    carry = 1;
                } else {
                    carry = 0;
                }
            }
            // 测试该测试用例是否能够产生新的配对组
            boolean flag = false;
            for (int j = 0; j < str.length; j++) {
                for (int k = j + 1; k < str.length; k++) {
                    String key = j + "_" + str[j][one[j]] + "," + k + "_" + str[k][one[k]];
                     System.out.println(key);
                    if (hashMap.get(key) == null) {
                        flag = true;
                         System.out.println("新的key:" + key);
                        hashMap.put(key, 1);
                    }
                }
            }


            // 产生了新的配对组,说明该用例符合 PairWise 规则,输出
            if (flag) {
                count++;
                System.out.print("测试用例" + count + ":" + str[0][one[0]]);
                for (int j = 1; j < str.length; j++) {
                    System.out.print("," + str[j][one[j]]);
                }
                System.out.println();
            }
        }
        System.out.println("PairWise方法测试用用例:" + count);
        System.out.println("传统方法测试用用例:" + sum);
    }


    public static void main(String[] args) {


//    A:"T"、"F"
//    B:"1"、"2"、"3"
//    C:"a"、"b"、"c"、"d"
        solution(new String[][]{{"T", "F"}, {"1", "2", "3"}, {"a", "b", "c", "d"}});
  

标签:Java,实现,System,int,length,Pairwise,str,println,out
From: https://www.cnblogs.com/wi-Tim-n/p/18208761

相关文章

  • 位运算符在 Javascript 中的运用
    零、资料JavaScript中的位运算和权限设计javascript位运算技巧巧用JS位运算JavaScript位运算及其妙用聊聊JavaScript中的二进制数一、权限在权限设计时,每一个基础权限单元都是二进制数形式,有且只有一位值是1,其余全部是0,即权限码是 2^n 。所以,在这套设......
  • nodejs + express + mysql + redis 基础功能实现
    nodejs+express+mysql+redis基础功能实现yeyue  9人赞同了该文章本文大体介绍了nodejs项目的创建、express框架的使用、mysql数据库的连接、以及redis的数据交互等方法,并举例了些简单的例子进行说明,代码都是亲自重头跑了一遍的,拿来可用。 一、......
  • 如何批量在线实现pdf转epub?
    pdf怎么转成epub格式?相信很多小伙伴在处理PDF文件时会遇到各种各样的问题,比如pdf怎么转epub这个格式,这个时候我们该如何解决呢?我们也会在网上找到一些方法和教程,但往往下载一堆软件却并不能完全解决问题,下面教你一种能真正解决问题的批量在线pdf转epub方法,而且还免费哟。我们都知......
  • 关于如何使用JNI将C语言接口打包成可供java环境调用的so库文件
    一、环境检查在linux下打包.so文件,首先需要确认是否有安装java环境,可通过在终端中输入指令java的方式来进行查看。如下图所示,则为已安装java环境。  若当前未安装java环境,则可通过在终端中输入如下指令进行安装,我这里使用的java环境为1.8.0版本。sudoapt-getinstallo......
  • uniapp实现左滑显示编辑删除按钮
     【使用时可删除不必要的内容,我就是记录一下】方法一:详细借鉴(app):http://www.aliyue.net/10130.html方法二:详细借鉴(微信小程序):https://blog.csdn.net/weixin_41579185/article/details/117747252?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-......
  • 使用-HTML5-和-JavaScript-开发-Windows-商店应用-全-
    使用HTML5和JavaScript开发Windows商店应用(全)原文:zh.annas-archive.org/md5/8F13EC8AC7BDB8535E7218C5DDB48475译者:飞龙协议:CCBY-NC-SA4.0序言使用HTML5和JavaScript开发WindowsStore应用是一本实践性强的指南,涵盖了WindowsStore应用的基本重要特性以及......
  • 精通-JavaScript-高性能-全-
    精通JavaScript高性能(全)原文:zh.annas-archive.org/md5/582AFDEF15013377BB79AB8CEA3B2B47译者:飞龙协议:CCBY-NC-SA4.0序言欢迎来到精通JavaScript高性能。在这本书中,我们已经以帮助任何JavaScript开发者,无论他们是新手上路还是经验丰富的老手的方式,覆盖了JavaScrip......
  • Java的深浅拷贝认识
    目录浅拷贝深拷贝分辨代码里的深浅拷贝在Java中,深拷贝和浅拷贝是对象复制的两种方式,主要区别在于对对象内部的引用类型的处理上。浅拷贝定义:浅拷贝是指创建一个新的对象,但这个新对象的属性(包括引用类型的属性)仍然指向原来对象的属性。换言之,如果原对象中的属性是一个引用类型......
  • .NET快速实现网页数据抓取
    前言今天我们来讲讲如何使用.NET开源(MITLicense)的轻量、灵活、高性能、跨平台的分布式网络爬虫框架DotnetSpider来快速实现网页数据抓取功能。注意:为了自身安全请在国家法律允许范围内开发网页爬虫功能。网页数据抓取需求本文我们以抓取博客园10天推荐排行榜第一页的文章标......
  • #Java集合的组内平均值的计算方法
    要计算Java集合(例如List或Set中的Integer、Double或其他数值类型的对象)的组内平均值,我们需要遍历这个集合,累加所有的元素值,然后除以集合的大小(即元素的数量)。以下是一个详细的步骤说明和完整的代码示例。1.步骤说明(1)创建集合:首先,我们需要一个包含数值的集合。在这个例子中,我们将......