每日作业20200525 - 图片相似度 ( 比较两个数组相似程度 )

2023-11-20

题目

图片相似度
    输入两个由01构成的 3*3的矩形, 如果两个矩形同坐标的值相同, 则为像素点相同
    相似度为两个矩形(相同像素点/总像素点) * 100%
    求图片相似度
	    样例输入:
		    1 0 1
		    0 0 1
		    1 1 0
		
		    1 1 0
		    0 0 1
		    0 0 1
	    样例输出:
	    	44.44%
	    解析: 以上矩形中
		    1  ×  ×
		    0  0  1
		    ×  ×  ×
	    为相同像素点,  相似度为(4/9)*100%

分析

  1. 输入两个合法的数组
  2. 判断二维数组的长度是否相等
  3. 判断二维数组里的一维数组的长度是否相等
  4. 判断相同位置的元素是否相等

代码

import java.util.Scanner;

public class Homework0525 {
    public static void main(String[] args) {
        System.out.println("\n*******************************************************");
        System.out.println("***输入两个由数字构成的 n*n的矩形***");
        System.out.println("***如果两个矩形同坐标的值相同, 则为像素点相同***");
        System.out.println("***相似度为两个矩形(相同像素点/总像素点) * 100%");
        System.out.println("*******************************************************\n");

        System.out.println("请输入第一个矩形矩阵(用空格隔开):");
        String[][] input1 = input();

        System.out.println();

        System.out.println("请输入第二个矩形矩阵(用空格隔开):");
        String[][] input2 = input();

        System.out.println("*******************************************************\n");

        System.out.println("结果");
        method(input1, input2); //调用判断方法
    }

    /**
     * 输入方法
     */
    public static String[][] input() {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入第一行(用空格隔开):");
        String str1 = sc.nextLine();   //接收用户输入
        String[] input1 = str1.trim().split("\\s+");  //去掉首尾得空格,将有效字符串以空格为分隔符存放进数组

        System.out.print("请输入第二行(用空格隔开):");
        String str2 = sc.nextLine();
        String[] input2 = str2.trim().split("\\s+");  //去掉首尾得空格,将有效字符串以空格为分隔符存放进数组

        System.out.print("请输入第三行(用空格隔开):");
        String str3 = sc.nextLine();
        String[] input3 = str3.trim().split("\\s+");  //去掉首尾得空格,将有效字符串以空格为分隔符存放进数组

        String[][] input = {input1, input2, input3};    //将结果放进数组中
        return input;
    }
	/**
	* 打印二维数组
	*/
    public static void print(String[][] input) {
        for(int i = 0; i < input.length; i++){
            for (int j = 0 ; j < input[i].length; j++){
                System.out.print(input[i][j] + "\t");
            }
            System.out.println();
        }
    }
    /**
     * 判断方法
     * @param input1 第一个矩阵
     * @param input2 第二个矩阵
     */
    public static void method(String[][] input1, String[][] input2) {
        /*打印第一个矩阵*/
        System.out.println("第一个矩阵");
        print(input1);
        /*打印第二个矩阵*/
        System.out.println("第二个矩阵");
        print(input2);

        /*长度*/
        int len = (input1.length == input2.length ? input1.length : -1);    //表示二维数组的长度,不相等赋值-1
        int[] length = new int[len];    //表示二维数组中一维数组的长度
        if(len != -1){		//两个二维数组长度一样
            for(int i = 0; i < len; i++){
            	/*判断两个二维数组里的相同位置的一维数组的长度是否相等*/
                length[i] = input1[i].length == input2[i].length ? input1[i].length: -1;    //不相等则赋值-1
            }
        }

        /*判断长度是否相等*/
        boolean b1 = len == -1 ? false : true;  //两个矩阵的大小是否相等,相等为true
        boolean b2 = true;                      //每一行的元素个数是否相等,相等为true
        for(int i = 0; i < len; i++ ){
            if(length[i] == -1){
                b2 = false;
                break;
            }
        }

        /*计数*/
        int sumLength = 0;  //总共有几个元素
        int count = 0;      //计数器,相同位置相同元素时,计数器+1
        double ratio = 0;   //相似度
        if (b1 & b2){
            for (int i = 0 ; i < length.length; i++){
                sumLength += length[i];		//总元素
            }

            for(int i = 0; i < len; i++){
                for (int j = 0 ; j < length[i]; j++){
                    if (input1[i][j].equals(input2[i][j])) {
                        count++;	//相等的元素
                    }
                }
            }
        }

        /*输出结果*/
        try{
            ratio = ((100 * count) / sumLength);
            System.out.println("一共有" + sumLength + "个元素,其中有" + count + "个相等");
            for(int i = 0; i < len; i++){
                for (int j = 0 ; j < length[i]; j++){
                    if (input1[i][j].equals(input2[i][j])) {
                        System.out.print(input1[i][j] + "\t");	//将相等的元素打印出来
                    }else{
                        System.out.print("*" + "\t");
                    }
                }
                System.out.println();
            }
            System.out.println("相似度为:" + ratio + "%");
        } catch (Exception e) {
            System.out.println("相似度为0");
        }
    }

}

运行结果

*******************************************************
***输入两个由数字构成的 n*n的矩形***
***如果两个矩形同坐标的值相同, 则为像素点相同***
***相似度为两个矩形(相同像素点/总像素点) * 100%
*******************************************************

请输入第一个矩形矩阵(用空格隔开):
请输入第一行(用空格隔开)1 0 1
请输入第二行(用空格隔开)0 0 1
请输入第三行(用空格隔开)1 1 0

请输入第二个矩形矩阵(用空格隔开):
请输入第一行(用空格隔开)1 1 0
请输入第二行(用空格隔开)0 0 1
请输入第三行(用空格隔开)0 0 1
*******************************************************

结果
第一个矩阵
1	0	1	
0	0	1	
1	1	0	
第二个矩阵
1	1	0	
0	0	1	
0	0	1	
一共有9个元素,其中有4个相等
1	*	*	
0	0	1	
*	*	*	
相似度为:44.0%
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

每日作业20200525 - 图片相似度 ( 比较两个数组相似程度 ) 的相关文章

  • Java new Date() 打印

    刚刚学习 Java 我知道这可能听起来很愚蠢 但我不得不问 System out print new Date 我知道参数中的任何内容都会转换为字符串 最终值是 new Date 返回对 Date 对象的引用 那么它是如何打印这个的呢 Mo
  • Java Swing:从 JOptionPane 获取文本值

    我想创建一个用于 POS 系统的新窗口 用户输入的是客户拥有的金额 并且窗口必须显示兑换金额 我是新来的JOptionPane功能 我一直在使用JAVAFX并且它是不同的 这是我的代码 public static void main Str
  • Spring Batch 多线程 - 如何使每个线程读取唯一的记录?

    这个问题在很多论坛上都被问过很多次了 但我没有看到适合我的答案 我正在尝试在我的 Spring Batch 实现中实现多线程步骤 有一个包含 100k 条记录的临时表 想要在 10 个线程中处理它 每个线程的提交间隔为 300 因此在任何时
  • Java中反射是如何实现的?

    Java 7 语言规范很早就指出 本规范没有详细描述反射 我只是想知道 反射在Java中是如何实现的 我不是问它是如何使用的 我知道可能没有我正在寻找的具体答案 但任何信息将不胜感激 我在 Stackoverflow 上发现了这个 关于 C
  • Java - 将节点添加到列表的末尾?

    这是我所拥有的 public class Node Object data Node next Node Object data Node next this data data this next next public Object g
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • Spark 1.3.1 上的 Apache Phoenix(4.3.1 和 4.4.0-HBase-0.98)ClassNotFoundException

    我正在尝试通过 Spark 连接到 Phoenix 并且在通过 JDBC 驱动程序打开连接时不断收到以下异常 为简洁起见 下面是完整的堆栈跟踪 Caused by java lang ClassNotFoundException org a
  • 反射找不到对象子类型

    我试图通过使用反射来获取包中的所有类 当我使用具体类的代码 本例中为 A 时 它可以工作并打印子类信息 B 扩展 A 因此它打印 B 信息 但是当我将它与对象类一起使用时 它不起作用 我该如何修复它 这段代码的工作原理 Reflection
  • Liferay ClassNotFoundException:DLFileEntryImpl

    在我的 6 1 0 Portal 实例上 带有使用 ServiceBuilder 和 DL Api 的 6 1 0 SDK Portlet 这一行 DynamicQuery query DynamicQueryFactoryUtil for
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • Mockito when().thenReturn 不必要地调用该方法

    我正在研究继承的代码 我编写了一个应该捕获 NullPointerException 的测试 因为它试图从 null 对象调用方法 Test expected NullPointerException class public void c
  • Spring @RequestMapping 带有可选参数

    我的控制器在请求映射中存在可选参数的问题 请查看下面的控制器 GetMapping produces MediaType APPLICATION JSON VALUE public ResponseEntity
  • 斯坦福 NLP - 处理文件列表时 OpenIE 内存不足

    我正在尝试使用斯坦福 CoreNLP 中的 OpenIE 工具从多个文件中提取信息 当多个文件 而不是一个 传递到输入时 它会给出内存不足错误 All files have been queued awaiting termination
  • 如何在 javadoc 中使用“<”和“>”而不进行格式化?

    如果我写
  • 仅将 char[] 的一部分复制到 String 中

    我有一个数组 char ch 我的问题如下 如何将 ch 2 到 ch 7 的值合并到字符串中 我想在不循环 char 数组的情况下实现这一点 有什么建议么 感谢您花时间回答我的问题 Use new String value offset
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • 如何从终端运行处理应用程序

    我目前正在使用加工 http processing org对于一个小项目 但是我不喜欢它附带的文本编辑器 我使用 vim 编写所有代码 我找到了 pde 文件的位置 并且我一直在从 vim 中编辑它们 然后重新打开它们并运行它们 重新加载脚
  • 如何从泛型类调用静态方法?

    我有一个包含静态创建方法的类 public class TestClass public static
  • 玩!框架:运行“h2-browser”可以运行,但网页不可用

    当我运行命令时activator h2 browser它会使用以下 url 打开浏览器 192 168 1 17 8082 但我得到 使用 Chrome 此网页无法使用 奇怪的是它以前确实有效 从那时起我唯一改变的是JAVA OPTS以启用
  • JGit 检查分支是否已签出

    我正在使用 JGit 开发一个项目 我设法删除了一个分支 但我还想检查该分支是否已签出 我发现了一个变量CheckoutCommand但它是私有的 private boolean isCheckoutIndex return startCo

随机推荐

  • 层次聚类在MATLAB中实现

    层次聚类在MATLAB中实现 By Yang Liu 1 第一种方法 1 输入要聚类的数据 2 计算各个样本之间的欧氏距离 3 把距离化成矩阵 矩阵中的元素 X i j X ij Xij 表示第i个样本和第j个样
  • python深度学习之用lightgbm算法实现鸢尾花种类的分类任务实战源码

    本代码以sklearn包中自带的鸢尾花数据集为例 用lightgbm算法实现鸢尾花种类的分类任务 参考来源 https lightgbm readthedocs io en latest Python Intro html usr bin
  • 用户偏好分析

    1 量化用户偏好 首先将用户分类 设定用户对于产品 喜爱 的标准 比如一天浏览产品5次 计算不同分类用户 喜爱 不同产品的人数 例如 分类 A类用户 B类用户 产品1 10 40 产品2 40 10 用户偏好指某类用户更偏好某产品 例如表中
  • 机器学习实战笔记-01概览

    机器学习的主要挑战 1 数据问题 数据量不足 训练数据不具有代表性 需要可泛化的案例 注意采样偏差 数据质量差 错误 异常 缺失 形成了噪音 无关特征 特征工程 选取 提取 创建特征 2 算法问题 过拟合 噪音 模型过于复杂参数过多 欠拟合
  • 2023华为笔试机考题库【等和子数组的最小和/动态规划】

    题目描述 给定一个数组nums 将元素分为若干个组 使得每组和相等 求出满足条件的所有分组中 组内元素和的最小值 输入描述 第一行输入 m 接着输入m个数 表示此数组 数据范围 1 lt M lt 50 1 lt nums i lt 50
  • 2023-02-21 好用的一款十六进制编辑器软件Hex Editor Neo ,以十六进制字节形式查看文件有字节

    一 Hex Editor Neo是一款十六进制编辑器软件 可以在几秒钟内处理大文件的操作 能够帮助用户编辑ASCII 十六进制 十进制 float double和二进制数据的应用程序 感觉比notepad的hex查看功能更强大 用notep
  • 音视频开发开发核心知识+新手入门必看基础知识

    音视频开发是一个广泛的领域 它涉及到多个技术领域 包括音频编解码 视频编解码 媒体容器格式 流媒体传输 音视频处理等 以下是音视频开发的一些基础知识 音频编解码器 音频编解码器是将数字音频信号编码成一种压缩格式 并且能够解码压缩的音频数据以
  • android华为手机开启蓝牙耳机,华为手机如何连接蓝牙耳机? 华为手机连接蓝牙耳机方法教程介绍!...

    我们现在在用手机的时候经常会用到耳机 听歌接电话看视频都离不开耳机 但是有的时候如果觉得耳机插来插去很麻烦就可以尝试用蓝牙耳机 那么知道华为手机怎么连接蓝牙耳机吗 具体的连接方法是怎么样的呢 下面小编就给大家简单介绍一下具体的连接方法吧 连
  • 大数据面试之SQL面试题

    一 提要 作为一名数据工作人员 SQL是日常工作中最常用的数据提取 简单预处理语言 因为其使用的广泛性和易学程度也被其他岗位比如产品经理 研发广泛学习使用 本篇文章主要结合经典面试题 给出通过数据开发面试的SQL方法与实战 二 解题思路 简
  • vue3 通过自定义指令在table中滚动加载数据

    1 在utils文件中新建一个loadMore ts文件 import type Directive App from vue const debounce function func any delay any let timer any
  • Source insight 4.0 暗色主题,模仿Atom one-darkv配色方案

    我是在MAC OS 10 12下使用crossover安装的 在wine环境下装4 0有个无法解决的bug是toolbar非常的宽 所以我取消了 反正用快捷键可以代替 关于wine安装之后界面模糊的问题请参考我这个帖子http blog c
  • 【UGUI】2D头顶血条制作

    前言 近期因为需要制作玩家和敌人头顶的2D血条 查找了很多博客 发现很多都拘束于Canvas的渲染模式必须要设定为ScreenSpace Overlay 还有应该是版本原因 我的是unity2019 1 11f1 用RecttTransfo
  • json字符串,本地存储讲解localstorage 和 sessionstorage及cookie,模板字符串初识

    这里写目录标题 json字符串 json格式的使用方法 对象的深拷贝狭义实现 localstorage 和 sessionstorage的区别 cookie 封装cookie函数 模板字符串初识 json字符串 abc123truelkgs
  • ElasticSearch基础(7.0+版本)

    一 ElasticSearch的用法 ES是基于Lucene开发的分布式高性能全文检索系统 支持分布式存储 水平扩展 主要能力是 存储 搜索 分析 我目前接触过的主要有两种用法 作为二级索引提高查询效率和基于关键词的全文检索 Lucene
  • 深入ftrace kprobe原理解析

    Linux krpobe调试技术是内核开发者专门为了编译跟踪内核函数执行状态所涉及的一种轻量级内核调试技术 利用kprobe技术 内核开发人员可以在内核的绝大多数指定函数中动态插入探测点来收集所需的调试状态信息而基本不影响内核原有的执行流程
  • 埋点的作用,如何埋点

    通过ThreadLocal和HandlerInterceptor实现java后台业务埋点日志功能 后端开发 埋点日志怎么做 流沙飞雪的博客 CSDN博客 埋点是什么 有什么作用 前端如何埋点 网页埋点 一只小可乐吖的博客 CSDN博客 用户
  • C#系列-继承

    00解释 1 命名空间 可以认为类是属于命名空间的 如果在当前项目中没有这个类的命名空间 需要我们手动的导入这个类所在的 命名空间 1 用鼠标去点 2 alt shift F10 3 记住命名空间 手动的去引用 2 在一个项目中引用另一个项
  • Qt快捷键(常用+非常详细)

    常用高频快捷键 Ctrl 多行注释 取消多行注释 Ctrl B 编译工程 Ctrl R 运行工程 Ctrl Alt up 向上箭头 当前行向上复制 Ctrl Alt down 向下箭头 当前行向下复制 Ctrl Shift up 向上箭头
  • ElasticSearch-快速入门(一)

    ES简介 全文搜索属于最常见的需求 开源的Elasticsearch 是目前全文搜索引擎的首选 它可以快速地储存 搜索和分析海量数据 维基百科 Stack Overflow Github 都采用它 Elastic 的底层是开源库Lucene
  • 每日作业20200525 - 图片相似度 ( 比较两个数组相似程度 )

    题目 图片相似度 输入两个由0和1构成的 3 3的矩形 如果两个矩形同坐标的值相同 则为像素点相同 相似度为两个矩形 相同像素点 总像素点 100 求图片相似度 样例输入 1 0 1 0 0 1 1 1 0 1 1 0 0 0 1 0 0