题目
图片相似度
输入两个由0和1构成的 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%
分析
- 输入两个合法的数组
- 判断二维数组的长度是否相等
- 判断二维数组里的一维数组的长度是否相等
- 判断相同位置的元素是否相等
代码
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%