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

题目

图片相似度
    输入两个由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%

你可能感兴趣的:(每日作业)